左外连接在相同的 table 条件下

left outer join on the same table with condition

我在名为 "mytable" 的 mysql 5.7 数据库中有一个 table,它是这样制作的:

 --------------------
| title   |   flag   |
|--------------------|
| first   |   0      |
| first   |   1      |
| second  |   0      |
 --------------------

从这个table我只需要select带有flag = 0的行,并从中删除所有与带有flag = 1的标题相同的行。结束这样的结果:

 --------------------
| title   |   flag   |
|--------------------|
| second  |   0      |
 --------------------

如何编写查询?谢谢

只需使用子查询并将其与MySQL 的IN() 函数结合使用。以下将起作用:

SELECT title, 
       flag
 FROM mytable
WHERE flag = 0
  AND title NOT IN( SELECT title FROM mytable WHERE flag = 1 );

SQL Fiddle

进行左外连接

SELECT a.*
FROM mytable a
LEFT OUTER JOIN mytable b
ON a.title = b.title
AND b.flag = 1
WHERE a.flag = 0
AND b.flag IS NULL

执行 LEFT OUTER JOIN,然后检查其中一个联接列中的 NULL 以确保没有找到匹配的记录。