#mysql #left-join
#mysql — сервер #соединение по левому краю #mysql
Вопрос:
Я пытаюсь выяснить, как разрешить необязательные AND
инструкции там, где есть LEFT OUTER JOIN
, поскольку таблица является необязательной при просмотре записей. Однако у меня проблема, когда нет файлов, и в WHERE
инструкции, подобной этой:
SELECT rec.record_id,
rec.record_name,
f.file_name,
f.file_id
FROM
(
records rec
LEFT OUTER JOIN files f ON f.record_id = rec.record_id
)
WHERE rec.record_id = 4928
AND f.file_approved = 1 <-- this is what returns a zero results
Когда я удаляю AND f.file_approved = 1
, это возвращает запись, но когда я оставляю ее, она не возвращает никакой записи.
Если запись не содержит файловых записей, она ничего не вернет. Мне нужно, чтобы он проверил это, и если там нет файлов, он все равно должен иметь возможность вернуть запись (без файлов).
Ответ №1:
попробуйте переместить условие в инструкцию join, таким образом, оно будет соединяться только в строках, если они соответствуют условию
SELECT rec.record_id,
rec.record_name,
f.file_name,
f.file_id
FROM
(
records rec
LEFT OUTER JOIN files f ON f.record_id = rec.record_id AND f.file_approved = 1
)
WHERE rec.record_id = 4928;
Ответ №2:
Если вы не хотите принудительно выполнять условие, используйте вместо этого OR
WHERE
rec.record_id = 4928
OR
f.file_approved = 1
Комментарии:
1. Это вернет все записи с
f.file_approved = 1
, но оно должно возвращать только записи с совпадениемrecord_id
.