Оставленное Соединение, не возвращая все строки

У меня есть этот запрос в MySQL:

SELECT pr.*, pr7.value AS `room_price_high`
FROM `jos_hp_properties` pr
LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id
WHERE pr7.field=23

jos_hp_properties таблица имеет 27 строк, но запрос только возвращает тот. На основе этого вопроса я думаю, что это может быть из-за оператора Where. jos_hp_properties2 таблица имеет полевой идентификатор, свойство, поле, значение, где field внешний ключ к третьей таблице (который я не должен получать данные из).

Существует ли способ выбрать все строки из первой таблицы, включая значение от таблицы № 2, где поле равняется 23 (или ПУСТОЙ УКАЗАТЕЛЬ, если нет никакого поля 23)?

12
задан DisgruntledGoat 9 November 2018 в 14:34
поделиться

3 ответа

Конечно. Переместите условие WHERE в JOIN:

SELECT pr.*, pr7.value AS `room_price_high`
  FROM `jos_hp_properties` pr
       LEFT JOIN `jos_hp_properties2` pr7 
       ON pr7.property=pr.id
   AND 
       pr7.field=23
33
ответ дан 2 December 2019 в 03:48
поделиться

Вы должны поместить критерий pr7 в объединение, а не в предложение where. Предложение where работает со всем набором результатов ПОСЛЕ выполнения соединения.

SELECT pr.*, pr7.value AS `room_price_high`
FROM `jos_hp_properties` pr
LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id and pr7.field=23
6
ответ дан 2 December 2019 в 03:48
поделиться

Попробуйте следующее:

SELECT pr.*, pr7.value AS `room_price_high`
FROM `jos_hp_properties` pr
LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id
WHERE (pr7.field=23 OR pr7.field is null)
0
ответ дан 2 December 2019 в 03:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: