我有一个名为'groups'的表和另一个名为'subscriptions'的表。
我想返回用户未订阅的所有组。
基本上这是我想要否定的条件(让我们假设id = 1的用户,状态只是检查组是否被激活):
SELECT *
FROM groups g
LEFT
JOIN subscriptions s
ON s.groups = g.id
WHERE g.status = 1
AND s.user = 1
此查询选择用户订阅的所有组,但我需要那些他没有订阅的组。我的问题是,当用户没有订阅时,表中没有与该用户相关的内容,所以如果我使用类似的东西!=它将返回我不需要的内容。
我认为使用NOT IN或NOT EXISTS但我无法让它工作。
你们有快速高效的解决方案吗? 非常感谢你
答案 0 :(得分:1)
更多 second 表中ON
子句的条件:
SELECT *
FROM `groups` G LEFT JOIN
`subscriptions` S
ON G.id = S.groups AND S.user = 1
WHERE G.status = '1';
我猜user
实际上是一个数字,这就是我删除引号的原因。在任何情况下,只使用字符串和日期常量的引号,而不是数字。
答案 1 :(得分:0)
使用此查询
SELECT * FROM groups g where g.ID not in(select groups from subscriptions)
答案 2 :(得分:-1)
您可以使用INNER JOIN
代替LEFT JOIN
来获取与其他记录相关的记录
SELECT * FROM `groups` AS G INNER JOIN `subscriptions` AS S ON G.id = S.groups WHERE G.status = '1' AND S.user = '1'