Попытка получить все результаты из базы данных с помощью левого соединения при использовании операторов WHERE - PullRequest
3 голосов
/ 04 апреля 2011

Я провел некоторое исследование, и я думаю, что то, что я ищу, является своего рода противоположностью тому, что я смог найти с помощью поиска.

В настоящее время я пытаюсь извлечь кучу данных из одной таблицы и сопоставить их со второй. Я использую левое соединение для достижения этой цели. Код, который я использую:

SELECT pn.id FROM pn 
LEFT OUTER JOIN p ON pn.part_number = p.part_number 
WHERE pn.programID = '13' 
AND pn.visible = '1' 
AND pn.type_id = '11' 
AND (p.user_code = '01045' OR p.user_code IS NULL) 
GROUP BY pn.part_number 
ORDER BY p.quantity DESC LIMIT 0,25 

Этот запрос прекрасно работает, если код пользователя либо соответствует заданному значению, либо номер детали отсутствует в таблице p. Проблема, с которой я сталкиваюсь, заключается в том, что если номер детали находится в таблице p, но под другим кодом пользователя, то номер детали не вытягивается.

Это не будет проблемой, за исключением того, что мне нужно отобразить все номера деталей из таблицы pn независимо от того, находятся ли они в таблице p. P содержит количество, которое мне нужно отсортировать, хотя мне нужна вся информация из таблицы pn.

Кто-нибудь знает, как я могу получить все из таблицы pn, и в то же время иметь возможность сортировать информацию по p.quantity, даже если номера деталей совпадают, а коды пользователей - нет?

Спасибо! Andrew

1 Ответ

4 голосов
/ 04 апреля 2011

Выполните тест для p.user_code части условия LEFT JOIN вместо выполнения этого в предложении WHERE.

SELECT pn.id FROM pn 
LEFT OUTER JOIN p ON pn.part_number = p.part_number 
    AND p.user_code = '01045'
WHERE pn.programID = '13' 
AND pn.visible = '1' 
AND pn.type_id = '11' 
GROUP BY pn.part_number 
ORDER BY p.quantity DESC LIMIT 0,25 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...