MySQL选择左连接为空的行
我有这些MySQL表格:
表格1:
id | writer
1 | Bob
2 | Marley
3 | Michael
表2:
user_one | user_two
1 | 2
而这个查询:
SELECT table1.id FROM table1 LEFT JOIN table2 ON table1.id = table2.user_one
这个查询将返回1,2,3的所有行table1
我只想选择在左侧关节中找不到的行。 所以它应该只返回id为3
行
我想与INNER JOIN相反,它将只选择在连接中找到的行。 如果左连接存在,如何得到相反的结果,忽略它并移动到下一行。 希望我很清楚
您可以使用以下查询:
SELECT table1.id
FROM table1
LEFT JOIN table2
ON table1.id IN (table2.user_one, table2.user_two)
WHERE table2.user_one IS NULL;
虽然,根据您在table2
上的索引,您可能会发现两个连接的性能会更好:
SELECT table1.id
FROM table1
LEFT JOIN table2 AS t1
ON table1.id = t1.user_one
LEFT JOIN table2 AS t2
ON table1.id = t2.user_two
WHERE t1.user_one IS NULL
AND t2.user_two IS NULL;
如果不想从table2
返回任何列,最好的方法之一就是使用NOT EXISTS
SELECT table1.id
FROM table1 T1
WHERE
NOT EXISTS (SELECT *
FROM table2 T2
WHERE T1.id = T2.user_one
OR T1.id = T2.user_two)
从语义上讲,这说明你想要查询的内容:选择第二个表中没有匹配记录的每一行。
MySQL针对EXISTS
进行了优化:只要找到第一个匹配记录,它就会返回。
这是一个查询,它只返回在table2
user_one
和user_two
两列中未找到对应的行:
SELECT T1.*
FROM table1 T1
LEFT OUTER JOIN table2 T2A ON T2A.user_one = T1.id
LEFT OUTER JOIN table2 T2B ON T2B.user_two = T1.id
WHERE T2A.user_one IS NULL
AND T2B.user_two IS NULL
每列( user_one
和user_two
)都有一个user_one
,查询只返回没有匹配user_two
行。
希望这会帮助你。
链接地址: http://www.djcxy.com/p/71109.html上一篇: MySQL select rows where left join is null
下一篇: select particular data from table1 which is not in table2 with where clause