0

私は世界で最も優れたSQL担当者ではありません。この問題により、約1週間私は夢中になっています。

私は3つのテーブルを持っています。1つ目は、次のデータを含む属性テーブルです。

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

したがって、基本的に、5000のIDに一致するattr_tableのすべてのアイテムが必要です。ただし、これらのアイテムがattr_group_tableにgroup = 2で存在する場合は、attr_group_tableの価格とプレフィックスを使用します。次に、名前テーブルの名前を吸います。返される必要のあるデータは、attr_id、name、price、prefixだけです。

私は結合、結合をいじり回してきましたが、必要なデータを取得できません。どんな助け/提案も素晴らしいでしょう。

4

3 に答える 3

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 に答える
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

引数の最初のnull以外の値を返します。

于 2012-11-27T21:53:22.953 に答える