2016-02-15 5 views
0

У меня есть 2 таблицы.MySQL - LEFT JOIN не работает как ожидалось

attribute 
========= 
ID Name 
------------------- 
1 Size 
2 Colour 


product_attribute 
========= 
ID attribute_id 
------------------- 
1 1 

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

Этот код приводит к «размеру», когда я ожидал «цвет». Что мне не хватает?

SELECT name FROM attribute a LEFT JOIN product_attribute p ON a.id = p.attribute_id 
+1

Это вернет обоих. – Strawberry

ответ

0

вы можете использовать вместо этого:

SELECT name FROM attribute where ID not in (select attribute_id from product_attribute) 
+0

И что произойдет, если внутренний запрос вернет null? Подсказка: запрос не будет работать. – sagi

+0

Когда у product_attribute нет данных в нем, он не вернет null, он вернет пустой –

+0

Чтобы соответствовать стандарту SQL, IN возвращает NULL не только, если выражение в левой части равно NULL, но также и если совпадение не найдено в список и одно из выражений в списке - NULL. http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#function_in – sagi

4
SELECT a.name FROM attribute a 
LEFT JOIN product_attribute p ON a.id = p.attribute_id 
where p.attribute_id is null