左外连接在相同的 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 );
进行左外连接
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 以确保没有找到匹配的记录。
我在名为 "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 );
进行左外连接
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 以确保没有找到匹配的记录。