2015-10-13 53 views
0

我有這3個表:MySQL的 - 3表查詢

Users 
_________ 
Id - Int 
UserName - Varchar 

Table1 
_________ 
id - Int 
Titlte - Varchar 

Table2 
_________ 
Id - Int 
Userid - Int 
Table1id - Int 

我想運行一個查詢,將顯示所有從表1是沒有顯示出來表2中的記錄。

例如,如果我的用戶ID是5和表2有這樣的記錄: 用戶ID - 5點 Table1id - 3

應該顯示從表1的行1,2,4,5 ....等,並skip row 3.

我該怎麼做?! 我認爲它可以使用連接來完成,但我不知道如何...

請幫我想出解決辦法:)

+0

你必須檢查'JOIN'。 – Wanderer

+0

嘿,我知道它可以通過連接查詢來完成,但我如何選擇除table1id下table2上顯示的行之外的所有行? – Niranbd

+0

您可以創建一個sqlfiddle並向我們展示預期結果 – Jens

回答

0

使用嵌套查詢:

SELECT * FROM Table1 WHERE id NOT IN (SELECT userid FROM Table2);

+0

Yessssssssss !!!這很有用!我的解決方案是: SELECT * FROM Table1 WHERE id NOT IN(SELECT table1id FROM Table2 where uid = 5); 非常感謝! 有沒有辦法做到這一點,而不需要花費從數據庫這麼多的資源? – Niranbd

+1

你可以嘗試'2'id'列上的'left join'和'select'' where Table'userid is null'。雖然我不確定查詢計劃在這個小案例中會有什麼不同。你爲什麼認爲效率低下? –

+0

它們會有所不同,因爲嵌套查詢會創建臨時表+ 2查詢,而不是與JOIN不同。我有點困惑,但OP究竟想做什麼,嵌套查詢很簡單。 – eithed