我有一个PACKAGES表和一个ITEMS表。他们有一对多的关系。同样,每个商品都属于一个品牌,在下一个简化的数据库结构的基础上,id被引用。
PACKAGES
package_id
PACKAGE_ITEM
package_id
item_id
ITEMS
item_id
brand_id
BRANDS
brand_id
description
如何查询包装,并获得一个包含品牌(描述)的列(如果它对所有商品而言都是唯一的);如果没有的话就清空?
谢谢!
答案 0 :(得分:0)
一种方法是使用case
表达式进行聚合:
select pi.package_id,
(case when min(i.brand_id) = max(i.brand_id) -- all the same
then min(i.brand_id)
end) as package_brand_id
from package_item pi join
items i
on pi.item_id = i.item_id
group by pi.package_id;
如果需要说明,则可以加入brands
:
select pi.package_id,
(case when min(b.description) = max(b.description) -- all the same
then min(b.description)
end) as package_brand_id
from package_item pi join
items i
on pi.item_id = i.item_id join
brands b
on i.brand_id = b.brand_id
group by pi.package_id;
答案 1 :(得分:0)
加入表并按package_id分组。然后使用CASE语句确定所有商品中是否只有1个品牌:
select
package_id,
case
when count(distinct b.brand_id) = 1 then max(b.description)
else null
end brand_description
from packages p
inner join package_item pi on pi.package_id = p.package_id
inner join items i on i.item_id = pi.item_id
inner join brands b on b.brand_id = i.brand_id
group by p.package_id