我对SQL查询有一点问题:我的'TableA'有一个字段'TableA.b',其中包含'TableB'的ID。我想从'TableB'中选择没有ID等于任何字段'TableA.b'的所有行。换句话说,我需要TableB中的每一行,而TableA中的任何行都没有引用它。 我试过像这样的查询:
SELECT DISTINCT TableB.* FROM TableA, TableB Where TableA.b != TableB.ID
但是结果包含一个也由否定返回的行,即两个字段具有相同值的行。 有任何想法吗?
答案 0 :(得分:1)
您需要的是LEFT (or RIGHT) JOIN。
self.searchController.presentViewController(vc, animated: false, completion: nil)
虽然可以使用子查询来执行相同的操作,但在某些otehr答案中也是如此。加入通常为faster。
LEFT [OUTER] JOIN可能比同等的子查询更快,因为 服务器可能能够更好地优化它 - 事实并非如此 特定于MySQL服务器。在SQL-92之前,外连接没有 存在,所以子查询是做某些事情的唯一方法。今天, MySQL Server和许多其他现代数据库系统提供了广泛的范围 外连接类型。
答案 1 :(得分:0)
你可以试试这个
SELECT TableB.* FROM TableB
WHERE ID NOT IN
(SELECT b from TableA);
答案 2 :(得分:0)
首先,从TableA
中选择所有ID:
SELECT DISTINCT b FROM TableA
然后使用该结果通过将上述查询用作子查询来选择TableB
中具有该集合中不存在的id的所有行:
SELECT * FROM TableB WHERE ID NOT IN (SELECT DISTINCT b FROM TableA)
希望这有帮助。
答案 3 :(得分:0)
在SELECT Query中使用NOT IN
。
SELECT * FROM TableB t1 WHERE t1.ID NOT IN (SELECT t2.b FROM TableA t2);
答案 4 :(得分:0)
您也可以使用右连接。 试试这个:
SELECT DISTINCT TableB.* FROM tablea RIGHT JOIN TableB ON TableA.b = Tableb.ID WHERE TableA.B IS NULL