Join

選擇具有外鍵或連接表關係的行

  • February 15, 2020

我有這樣的桌子

# Things
id
user_id

# ThingUser
id
thing_id
user_id

我想通過 ThingUser 選擇 user_id=123 或與使用者 123 相關的所有事物。

我想也許我很接近這樣的事情:

select * from things
 left outer join thing_users on things.id=thing_users.thing_id and thing_users.user_id = 123
 where
   things.user_id = 123 OR
   thing_users.id IS NOT NULL

但是在我非常大的數據集上,這會掛起幾秒鐘,然後我就退出了。

我得出的結論是,實現這一目標的唯一/最合適的方法就是使用 UNION。這兩個查詢結合在一起:

  • 其中 user_id=123
  • 它通過 ThingUser 與使用者 123 相關

1)如果有,請使用測試環境

2)更改您的查詢以返回較小的樣本量,以查看這是否是您要查找的內容:

SELECT TOP 100 * from things
 INNER JOIN thing_users
ON things.id=thing_users.id
 WHERE things.user_id = 123

引用自:https://dba.stackexchange.com/questions/258165