Могу ли я выбрать строку, где нет в RIGHT JOIN или JOIN? - PullRequest
1 голос
/ 17 апреля 2019

Я хочу найти группы, которые не участвуют в событии.

Моя таблица:

Группа:

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

Группа 1 была созданаучастником 5 его зовут «тагада», а его описание «эпическое».

event:

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

Название события 1 - «обед», а его описание - «на обед понедельник ".

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

Ответы [ 3 ]

0 голосов
/ 17 апреля 2019

, если вы хотите найти не участвующие группы по идентификатору группы, тогда:

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

0 голосов
/ 17 апреля 2019

Чтобы найти группы, которые не участвуют в конкретном событии, вам необходимо включить это условие в JOIN, а затем проверить результирующее значение NULL в groupe_events Таблица. Например, чтобы найти группы, не участвующие в событии 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

Демонстрация на dbfiddle

0 голосов
/ 17 апреля 2019

Top ответить на ваш вопрос:

Я хочу найти группы, которые не участвуют в событии ...

Я бы сделал внешнее объединение, какв:

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