0

我不是世界上最伟大的 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 中且 group=2,则使用 attr_group_table 中的价格和前缀。然后只是吸一下名称表的名称。我需要返回的唯一数据是 attr_id、名称、价格和前缀。

我一直在处理连接、联合、if 的问题,只是无法获得我想要的数据。任何帮助/建议都会很棒。

4

3 回答 3

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
于 2012-11-27T21:50:55.360 回答
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

它将返回其参数的第一个非空值。

于 2012-11-27T21:53:22.953 回答
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
于 2012-11-27T21:48:18.670 回答