MySQL И альтернатива для каждой таблицы в соединении - PullRequest
1 голос
/ 18 мая 2010

У меня есть простое объединение в запросе, однако мне нужно, чтобы в обеих таблицах было условие «подтверждено =« да »», но если в одной из таблиц нет ни одной из них, соответствующих запросу, возвращается без строк.

База данных:

.----------parties----------.
| id - party_id - confirmed |
|---------------------------|
| 1       1          yes    |
| 1       2          no     |
| 1       3          no     |
+---------------------------+

.-----------events----------.
| id - event_id - confirmed |
|---------------------------|
| 1       1          no     |
+---------------------------+

или

.----------parties----------.
| id - party_id - confirmed |
|---------------------------|
| 1       1          no     |
| 1       2          no     |
| 1       3          no     |
+---------------------------+

.-----------events----------.
| id - event_id - confirmed |
|---------------------------|
| 1       1          yes    |
+---------------------------+

Запрос:

SELECT p.party_id, e.event_id
FROM parties p
LEFT JOIN events e
ON p.id=e.id
WHERE p.id = '1'
AND p.party_id IN (1,2,3)
AND e.event_id IN (1)
AND p.confirmed='yes'
AND e.confirmed='yes'

Он ничего не возвращает, но я хочу, чтобы он возвращал party_id 1 с пустым event_id или event_id и пустым party_id. Я надеюсь, что это имеет смысл, и я ничего не пропустил, Спасибо за вашу помощь!

РЕДАКТИРОВАТЬ Добавлен обратный код базы данных, который мне нужен для возврата event_id, и пустой party_id

1 Ответ

2 голосов
/ 18 мая 2010

Ваши условия WHERE отфильтровывают все NULLs, сгенерированные LEFT JOIN.

Переместить все условия, которые включают events, в предложение ON:

SELECT  p.party_id, e.event_id
FROM    parties p
LEFT JOIN
        events e
ON      e.id = p.id
        AND e.event_id IN (1)
        AND e.confirmed = 'yes'
WHERE   p.id = '1'
        AND p.party_id IN (1, 2, 3)
        AND p.confirmed = 'yes'
UNION ALL
SELECT  p.party_id, e.event_id
FROM    events e
LEFT JOIN
        parties p
ON      p.id = e.id
        AND p.party_id IN (1, 2, 3)
        AND p.confirmed = 'yes'
WHERE   e.event_id IN (1)
        AND e.confirmed = 'yes'
        AND p.id IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...