[MySQL] JOIN на одну таблицу 2 раза
От: ghostrider Беларусь https://www.linkedin.com/in/andreipushkin
Дата: 30.07.09 19:38
Оценка:
есть 2 таблицы
products(id, name)
specs(product_id, spec_id, spec_value)

specs.product_id = products.id

у каждого продукта может быть произвольное кол-во спеков.

нужно выбрать id продуктов у которых есть спек с id=A и значение этого спека, но нет спека с id=B

вот что написал

SELECT id, spec_a FROM 
(SELECT id, t_spec_a.spec_value spec_a
FROM `products` 
LEFT JOIN specs t_spec_a
ON (t_spec_a.product_id=products.id AND t_spec_a.spec_id='A')
WHERE t_spec_a.spec_value IS NOT NULL) t1
LEFT JOIN specs t_spec_b
ON (t_spec_b.product_id=t1.id AND t_spec_b.spec_id='B')
WHERE t_spec_b.spec_value IS NULL


изначально хотел написать

SELECT id, t_spec_a.spec_value spec_a FROM 
FROM `products` 
LEFT JOIN specs t_spec_a, specs t_spec_b
ON (t_spec_a.product_id=products.id AND t_spec_a.spec_id='A' AND t_spec_b.product_id=products.id AND t_spec_b.spec_id='B')
WHERE t_spec_a.spec_value IS NOT NULL AND t_spec_b.spec_value IS NULL


но даже если убрать все условия из WHERE этот запрос возвращает только продукты у которого есть обе спеки (А и В)

подскажите как перефразировать этот запрос без временной таблицы. объемы данных у меня небольшие так что можно оставить и так, но хотелось бы написать правильно
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.