查询mysql中的位置

时间:2017-10-09 13:57:23

标签: mysql sql

我有一个名为'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但我无法让它工作。

你们有快速高效的解决方案吗? 非常感谢你

3 个答案:

答案 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'