给出下表:
+----+-----------+---------+
| id | author_id | content |
+----+-----------+---------+
| 1 | 1 | |
+----+-----------+---------+
| 2 | 2 | |
+----+-----------+---------+
| 3 | 1 | |
+----+-----------+---------+
| 4 | 2 | XYZ |
+----+-----------+---------+
Run Code Online (Sandbox Code Playgroud)
如何选择author_id仅包含无内容的帖子而不使用子查询的的列表?在这种情况下,我想要一个只返回author_id1 的查询。
这行得通,但是我想知道是否有一种方法不必为了性能而使用子查询。
SELECT author_id
FROM my_table
WHERE author_id NOT IN (
SELECT author_id FROM my_table WHERE content != ''
)
GROUP BY author_id
Run Code Online (Sandbox Code Playgroud)
这是一个小提琴。
您可以使用HAVING子句过滤组:
SELECT author_id
FROM my_table
GROUP BY author_id
HAVING MAX(LENGTH(content)) = 0
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用JOIN尝试查找具有非空白内容的任何行,而仅选择不匹配的行。
SELECT t1.author_id
FROM my_table AS t1
LEFT OUTER JOIN my_table AS t2 ON t1.author_id = t2.author_id
AND LENGTH(t2.content) > 0
WHERE t2.author_id IS NULL
Run Code Online (Sandbox Code Playgroud)