@Vampire016

Как сформировать запрос, чтобы выводил строки с пустыми значениями?

Есть оч. большое количество связанных таблиц (10 + 3 переименованные копии) в одном запросе для отображения в клиентском приложении заявок (Orders).

Запрос:
SELECT Orders.id, Orders.Title, `Status`.SName, `Edit`.DateEdit, `Create`.DateOpen, Priority.PName, createUser.FullName AS Инициатор, workUser.FullName AS `Кто назначен`, Categories.`C+SC` 
FROM Users AS editUser INNER JOIN (types INNER JOIN (Categories INNER JOIN (Status INNER JOIN (RequestSource INNER JOIN (Priority INNER JOIN ((((Orders INNER JOIN control ON Orders.id = control.id) INNER JOIN (Users AS createUser INNER JOIN `Create` ON createUser.id = Create.WhoCreate) ON Orders.id = Create.id) INNER JOIN Edit ON Orders.id = Edit.id) 
INNER JOIN (Users AS workUser INNER JOIN `Work` ON workUser.id = Work.WhoWork) ON Orders.id = Work.id) ON Priority.id = Orders.Priory) ON RequestSource.id = Orders.RequestSource) ON Status.id = Orders.Status) ON Categories.id = Orders.Category) ON types.id = Orders.type) ON editUser.id = Edit.WhoEdit ORDER BY Orders.id DESC;


Схема:
6091761b67231750686405.png

Проблема состоит в том что поля в Create.WhoCreate и Edit.WhoEdit имею статус NotNULL и не приносят проблем, а вот Work.WhoWork может быть NULL и если хоть в одной строчке отсутствует значение (стоит NULL) вся строка выборки исчезает из таблицы вывода. Необходимо, чтобы выводились все строки согласно Orders.id, но в некоторых Work.WhoWork были пустые ячейки.

Может кто помочь? Искал в интернете, но так и не нашел, как это реализовать.
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
LEFT JOIN / RIGHT JOIN
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rPman
У тебя таблица work имеет смысл - факты исполняемой работы, а WhoWork - идентификатор Users, кто работает
но мне не понятна связь Work и Order, на схеме она есть но не видно какое поле из Work тут должно использоваться, id у них общий? но это не имеет смысла.

Чем должно являться пустое поле WhoWork? т.е. работа сделана но никем? это так же не имеет смысла и не понятно, по какому условию они должны попасть в результат? все пустые? - тогда добавь их к запросу union

p.s. настоятельно рекомендую провести рефакторинг и переименовать все поля, являющиеся идентификаторами foreign key, в имя_поля_id, при этом имя_поля по возможности должно быть именем таблицы (хотя не всегда это возможно, например две связи),т.е. в твоем случае WhoWork должно именоваться WhoWork_id или user_id.

В этом случае читать запрос и схему станет гораздо проще.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы