我可以 select 行不在 RIGHT JOIN 或 JOIN 中吗?

Can I select row where not in RIGHT JOIN or JOIN?

我想查找未参加活动的团体。

有我的table:

群组:

+-----------+-------------+-----------+-------------+
| 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

的行

如果我使用 classique 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    |
+-----------+-------------+-----------+-------------+

最先回答你的问题:

I want to find groups which doesn't participate at an event...

我会做一个外连接,如:

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

如果您想根据组 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 回答的相同查询

要查找未参加特定活动的团体,您需要在JOIN中包含该条件,然后检查结果NULL 中的值 groupe_events table。例如,要查找未参加事件 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