2016-05-28 2 views
0

У меня есть вопрос относительно запроса. Есть две таблицы:Атрибуты запроса, где отсутствует один атрибут

Objects table: 
============== 
Object ID Date 
1  2016-03-15 
2  2016-01-20 

Attributes table: 
================= 
Parent ID Attribute AttributeData 
1  Size  XL 
2  Size  S 
2  Price  20 

The query is to join the data to get this: 
========================================== 
Objet ID Size Price 
1  XL NULL 
2  S 20 

But I only get this: 
========================================== 
Objet ID Size Price 
2  S 20 

LEFT JOIN не поможет - потому что нет записи в таблице атрибутов для цены на ID1.

Прошу прощения за beein, такой новичок на этом.

Рад за любую помощь.

Штеффен

+0

Пожалуйста, разместите свой существующий запрос. Также уточните, какую базу данных вы используете, так как это повлияет на ответ. – Alex

ответ

2

Я думаю, что условное объединение делает то, что вы хотите:

select parentid, 
     max(case when attribute = 'Size' then attributedata end) as size, 
     max(case when attribute = 'Price' then attributedata end) as price 
from attributes 
group by parentid; 

Использование left join вы могли бы сделать:

select o.*, s.attributedata as size, p.attributedata as price 
from objects o left join 
    attributes s 
    on o.objectid = s.parentid and s.attribute = 'Size' left join 
    attributes p 
    on o.objectid = p.parentid and p.attribute = 'Price'; 

Обратите внимание, что для этой работы, состояние на имя атрибута должно быть в условии on, а не в предложении where.

Смежные вопросы