【问题标题】:Can I select row where not in RIGHT JOIN or JOIN?我可以选择不在 RIGHT JOIN 或 JOIN 中的行吗?
【发布时间】:2019-04-17 13:58:34
【问题描述】:

我想找到不参加活动的团体。

这是我的桌子:

分组:

+-----------+-------------+-----------+-------------+
| id_groupe | id_createur |    name   | description |
+-----------+-------------+-----------+-------------+
|     1     |      5      |   tagada  |    epic     |
+-----------+-------------+-------------------------+
|     2     |      1      |   banana  |    good     |
+-----------+-------------+-----------+-------------+
|     3     |      1      | blueberry |  legendary  |
+-----------+-------------+-----------+-------------+
|     4     |      2      |   coco    |    great    |
+-----------+-------------+-----------+-------------+

群组 1 由成员 5 创建,他的名字是“tagada”,他的描述是“epic”。

事件:

+-----+-------------+----------------+
| id  |     name    |  description   | 
+-----+-------------+----------------+
|  1  |    lunch    |for lunch monday|
+-----+-------------+----------------+
|  2  |    game     | play videogame |
+-----+-------------+----------------+

事件 1 的名称是“lunch”,他的描述是“for lunch monday”。

groupe_events:

+--------------+--------------+
| id_groupe_ge | id_events_ge |
+--------------+--------------+
|      1       |      2       |
+--------------+--------------+
|      2       |      2       |
+--------------+--------------+
|      3       |      2       |
+--------------+--------------+
|      1       |      1       |
+--------------+--------------+
|      3       |      1       |
+--------------+--------------+

例如,第 1、2 和 3 组将参加活动 2,而第 1 和 4 组将参加活动 1

如果我使用 LEFT JOIN,我无法指定事件的 id (id_groupe_ge)

Mysql

SELECT * 
FROM groupe 
    LEFT JOIN groupe_events ON id_groupe_ge = id_groupe 
WHERE id_groupe_ge IS NULL

或 mysql

SELECT * 
FROM groupe 
    LEFT JOIN groupe_events ON id_groupe_ge = id_groupe 
WHERE id_events_ge IS NULL OR id_events_ge <> 2

使用这种方法,我也有 id_events_ge 1 的行

如果我使用经典的 JOIN 和 WHERE,我有参与的组,而这恰恰相反

Mysql

SELECT * 
FROM groupe 
    JOIN groupe_events ON id_groupe_ge = id_groupe 
WHERE id_events_ge = 2

例如,我如何找到不参加活动 2 的团体? 这是这个:

+-----------+-------------+-----------+-------------+
|     4     |      2      |   coco    |    great    |
+-----------+-------------+-----------+-------------+

其他示例,例如,我想查找不参加活动 1 的组? 这是这个:

+-----------+-------------+-----------+-------------+
|     2     |      1      |   banana  |    good     |
+-----------+-------------+-----------+-------------+
|     4     |      2      |   coco    |    great    |
+-----------+-------------+-----------+-------------+

【问题讨论】:

  • 您想获取所有未参加任何活动的组,或者您将始终拥有一个要获取未参加的组的活动 ID?

标签: mysql sql join left-join right-join


【解决方案1】:

要查找不参与特定事件的组,您需要在JOIN 中包含该条件,然后在@987654324 中检查结果NULL 值@ 桌子。例如,要查找未参与事件 1 的组:

SELECT g.*
FROM groupe g
LEFT JOIN groupe_events ge ON ge.id_groupe_ge = g.id_groupe AND ge.id_events_ge = 1
WHERE ge.id_groupe_ge IS NULL

输出:

id_groupe   id_createur name    description
2           1           banana  good
4           2           coco    great

对于事件 2:

SELECT g.*
FROM groupe g
LEFT JOIN groupe_events ge ON ge.id_groupe_ge = g.id_groupe AND ge.id_events_ge = 2
WHERE ge.id_groupe_ge IS NULL

输出:

id_groupe   id_createur name    description
4           2           coco    great

Demo on dbfiddle

【讨论】:

  • @samuel 不用担心。很高兴我能帮上忙。
【解决方案2】:

最佳回答您的问题:

我想查找不参加活动的团体...

我会做一个外连接,如下所示:

select g.*
from groupe g
left join groupe_events ge on ge.id_group_ge = g.id_groupe
where ge.id_group_ge is null

【讨论】:

    【解决方案3】:

    如果您想根据组 ID 查找未参与的组,则:

    select group.*
    from groupe
    left join groupe_events on groupe_events.id_group_ge = groupe.id_groupe
    where groupe_events.id_group_ge is null and groupe_events.id_events_ge = 'put-your-id-here'
    

    否则,使用@The Impaler 回答的相同查询

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 2013-03-10
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      • 2019-09-03
      相关资源
      最近更新 更多