2016-09-28 93 views
0

我試圖找到一個SELECT查詢,返回所有的tableA.tba_id未tableB的存在(請注意,是兩個不同的外鍵 - tbb_tbAID1tbb_tbAID2數據之間。 You can find DB Model here無法選擇兩個外鍵從其他表

我能做些什麼,到目前爲止
此只測試一列

SELECT tba_id FROM tableA 
WHERE tba_id NOT IN 
    (SELECT tbb_tbAID1 FROM tableB 
    WHERE tbb_date > '$date2') 

我在嘗試時來測試外國鍵

1241 MySQL錯誤 - 操作數應包含1列(S)

查詢:

SELECT tba_id FROM tableA 
WHERE tba_id NOT IN 
    (SELECT tbb_tbAID1,tbb_tbAID2 FROM tableB 
    WHERE tbb_date > '$date2') 

嘗試2:

SELECT tba_id FROM tableA 
WHERE tba_id NOT EXISTS 
    (SELECT 1 FROM tableB 
    WHERE (tba_id = tbb_tbAID1 OR tba_id = tbb_tbAID2) 
    AND tbb_date > '$date2') 

,但得到比第一次嘗試更多的結果(這表明,這是非常錯誤做)

Try3:

SELECT tba_id FROM tableA JOIN tableB ON tba_id!=tbb_tbAID1 AND tba_is!=tbb_tbAID2 WHERE tbb_data > '$data' 

這導致在巨大的數據集,遠離第一方法。

回答

0

的實際工作查詢:

SELECT tba_id FROM tableA 
WHERE NOT EXISTS (SELECT * FROM tableB WHERE (tba_id = tbb_tbAID1 OR tba_id = tbb_tbAID2) AND tbb_data > '$date') 

Try2,我換成SELECT 1SELECT *並刪除WHERE tba_id NOT EXISTS和工作就像一個魅力。

0

做一個連接而不是嵌套查詢,它更快,更高效。

SELECT tba_id FROM tableA JOIN tableB ON tba_id!=tbb_tbAID1 AND tba_is!=tbb_tbAID2 
+0

這並不完全回答我的問題,因爲我之前曾嘗試過使用'JOIN'(抱歉,沒有提及它,問題已更新),並且它沒有從tableB的'data'中選擇 –