如果第一个和第二个匹配的字段,则select语句输出第二个表的值

时间:2012-11-27 21:34:21

标签: mysql sql

我不是世界上最伟大的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,名称,价格和前缀。

我一直在乱搞连接,工会,如果是,只是无法得到我想要的数据。任何帮助/建议都会很棒。

3 个答案:

答案 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值。