MySQL: LEFT JOIN .. выбрать все из таблицы 1, даже если их нет в таблице 2? - PullRequest
3 голосов
/ 21 октября 2009

Я присоединяюсь к нескольким таблицам для выбора

Если во 2-й, 3-й, 4-й таблицах ничего не найдено, я все еще хочу получить результаты, пока первая таблица имеет совпадение. Я думал, что LEFT JOIN сделал это, но это не так.

Вот полный запрос:

SELECT cart_product.*, prod_drop_products.prod_drop_product_name, everlon_sheet.*, cart_product.product_id AS product_id 
FROM cart_product 
LEFT JOIN everlon_sheet ON cart_product.product_id = everlon_sheet.product_id 
LEFT JOIN prod_drop_products ON cart_product.product_id = prod_drop_products.product_id 
LEFT JOIN prod_drop ON prod_drop.prod_drop_id = prod_drop_products.prod_drop_id 
WHERE prod_drop.prod_drop_name = "Carat Weight" AND cart_product.product_brand = "everlon" 
ORDER BY cart_product.product_manufacturer_num

который тянет 316 результатов

Вот запрос без объединений:

SELECT cart_product.* 
FROM cart_product 
WHERE cart_product.product_brand = "everlon" 
ORDER BY cart_product.product_manufacturer_num

, который тянет 362 результата

У меня есть предчувствие, что это происходит из-за моего WHERE prod_drop.prod_drop_name = "Carat Weight" предложения в сообщении JOIN. Но есть ли способ получить то, что мне нужно в моем запросе выше, но все же вытащить все из первой (самой левой, cart_product) таблицы, даже если в других таблицах ничего не совпадает?

Спасибо !!

Ответы [ 3 ]

3 голосов
/ 21 октября 2009

Если совпадений с правой стороны нет, prod_drop.prod_drop_name будет нулевым

Добавление ИЛИ prod_drop.prod_drop_name IS NULL должно решить вашу проблему.

1 голос
/ 21 октября 2009

Изменение

WHERE prod_drop.prod_drop_name = "Carat Weight" AND cart_product.product_brand = "everlon" 

до

WHERE (prod_drop.prod_drop_name = "Carat Weight" OR prod_drop.prod_drop_name IS NULL) AND cart_product.product_brand = "everlon" 

Запрос теперь также будет возвращать совпадение, если в prod_drop нет соответствующего значения.

1 голос
/ 21 октября 2009

1001 * попробовать *

WHERE prod_drop.prod_drop_name = "Carat Weight" or prod_drop.prod_drop_name is null
...