2016-09-28 33 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'中选择 –