我不是世界上最伟大的SQL人,这个问题让我疯狂了大约一个星期了。
我有3张桌子。第一个是具有以下数据的属性表:
attr_group_table
attr_id group price prefix id
4 2 20.00 + 5000
1 2 30.00 + 5000
attr_table
attr_id id value_id price prefix
1 5000 2 10.00 -
4 5000 3 10.00 +
13 5000 9 50.00 +
name_table
id name
2 widget1
3 widget2
9 widget3
基本上,我需要attr_table中与ID为5000匹配的所有项目。但是,如果这些项目存在于attr_group_table with group = 2,那么请使用attr_group_table中的价格和前缀。然后只需知道名称表的名称。我需要返回的唯一数据是attr_id,名称,价格和前缀。
我一直在乱搞连接,工会,如果是,只是无法得到我想要的数据。任何帮助/建议都会很棒。
答案 0 :(得分:0)
Select attr_table.attr_id,name,attr_group_table.price, attr_group_table.prefix
From attr_table join attr_group_table
On attr_table.attr_id = attr_group_table.attr_id
join name_table on name._table.id = attr_table.attr_id
Where attr_table.attr_id = 5000 and group = 2
Union
Select attr_table.attr_id,name,attr_table.price, attr_table.prefix
From attr_table join attr_group_table
On attr_table.attr_id = attr_group_table.attr_id
join name_table on name_table.id = attr_table.attr_id
Where attr_table.attr_id = 5000 and group <> 2
答案 1 :(得分:0)
SELECT
attr_table.attr_id,
name_table.name,
case when attr_group_table.group=2
then attr_group_table.price
else attr_table.price end as price,
case when attr_group_table.group=2
then attr_group_table.prefix
else attr_table.prefix end as prefix
FROM
attr_table left join attr_group_table
on attr.table.attr_id = attr_group_table.attr_id
left join name_table on attr_table.attr_id = name_table.id
WHERE
attr_table.id = 5000
答案 2 :(得分:0)
使用函数COALESCE:
SELECT
attr_table.attr_id, attr_table.id, attr_table.value_id,
COALESCE(attr_group_table.prefix, attr_table.prefix) prefix,
COALESCE(attr_group_table.price, attr_table.price) price,
name_table.name
FROM attr_table
LEFT JOIN attr_group_table ON attr_table.attr_id=attr_group_table.attr_id
LEFT JOIN name_table ON attr_table.value_id=name_table.id
它将返回其参数的第一个非null值。