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_oneuser_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_oneuser_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