LEFT OUTER JOIN с предложением WHERE на 2-й таблице, не влияет на 1-ую таблицу - PullRequest
2 голосов
/ 21 июня 2019

Я пытаюсь вернуть набор записей из двух таблиц. Я использую LEFT OUTER JOIN, потому что я хочу все данные из таблицы 1. Я хочу получить данные из таблицы 2 JOINED только в том случае, если выполняется определенное предложение.

Кажется, что предложение переопределяет LEFT OUTER JOIN и не возвращает записи из таблицы 1, если запись из таблицы 2 не соответствует предложению WHERE.

SELECT p.code, p.name, d.product_code, d.detail_type, d.description
  FROM products p
  LEFT OUTER JOIN product_details d
    ON p.code = d.product_code 
 WHERE product_details.detail_type = 'ALTERNATIVE NAMES'

Я хочу, чтобы все строки возвращались из продуктов, но я хочу, чтобы строки из product_details были объединены только, если product_details.detail_type = 'ALTERNATIVE NAMES'

Я ищу некоторые рекомендации относительно того, возможно ли это, или мне следует удалить ненужные данные после первоначального JOIN?

Ответы [ 2 ]

2 голосов
/ 21 июня 2019

Просто замените WHERE на AND, чтобы использовать его точно так же, как LEFT [OUTER] JOIN.

например

ON products.code = product_details.product_code
        AND product_details.detail_type = 'ALTERNATIVE NAMES'

В противном случае запрос обрабатывается как INNER JOIN.

2 голосов
/ 21 июня 2019

используйте product_details.detail_type = 'ALTERNATIVE NAMES' условие в ON Clause вместо where Clause

SELECT products.code, products.name, product_details.product_code, product_details.detail_type, product_details.description
FROM products 
LEFT OUTER JOIN product_details 
ON products.code = product_details.product_code 
and product_details.detail_type = 'ALTERNATIVE NAMES'
...