假设我有以下架构
users
+-------+------------+
| Field | Type |
+-------+------------+
| id | integer |
+-------+------------+
posts
+---------+-------------+
| Field | Type |
+---------+-------------+
| id | integer |
| user_id | integer |
| topic | varchar(255)|
+---------+-------------+
如何查找从未创建过关于Cats的帖子的所有用户?我尝试了这个查询,但它没有用。
SELECT users.*
FROM users
LEFT JOIN posts
ON users.id = posts.user_id
WHERE posts.user_id IS NULL
AND posts.topic LIKE 'Cats'
即使有用户从未发布过" Cats"
,也会返回一个空集。答案 0 :(得分:3)
这将解决您的问题,请尝试让我知道是否有帮助
SELECT * FROM `users` INNER JOIN posts ON users.id=posts.user_id WHERE users.id NOT IN(SELECT users.id FROM `users` LEFT JOIN posts ON users.id=posts.user_id WHERE posts.topic LIKE '%cats%')
答案 1 :(得分:2)
json_encode
答案 2 :(得分:0)
这可能会有所帮助:SELECT users.* FROM posts LEFT JOIN users ON posts.user_id = users.id WHERE posts.topic NOT LIKE %Cats% ;
答案 3 :(得分:0)
您需要将LIKE条件添加到on子句。
SELECT users.*
FROM users
LEFT JOIN posts
ON users.id = posts.user_id
AND posts.topic LIKE 'Cats'
WHERE posts.user_id IS NULL
其他大多数答案都错误地在WHERE子句中使用NOT LIKE
,但这将返回任何没有猫的帖子的用户。因此,如果用户发布了关于猫的信息,但也发布了一些不涉及猫的信息,则会在这些查询中错误地返回。