私はすべてのIDと名前を選択して、いくつかの特徴とそれぞれの値を取得する必要があり、この1は値
id name characteristic value isList
1 cube sides 6 0
1 cube color blue 0
2 triangle sides 3 0
3 hexagon (null) (null) (null)
4 rectangle weight 15 0
のような見解を持っているを選択するために、独自のテーブルに参加しましょう。たとえば、すべての図形(ID 1,2,3,4)と特性の面と色(使用可能な場合は、IDと名前のみが塗りつぶされ、その他は空白)を取得したいとします。
私は
select *
from shapes_view
where (id = 1 or id = 2 or id = 3 or id = 4) and (characteristic like 'sides' or characteristic like 'color')
を試みたが、それは、明らかに、ID 1と2ではなく3と4
を取得する私の推測では、私はこれを行うには、サブクエリのいくつかの並べ替えを必要とするということですが、ときに私自分自身でこのビューに参加しようとすると、私は必要なものの近くにない組み合わせの長いリストを取得します。私が取得するつもり何
は私がすべての値を選択して、私はJava側にないものを何をすべきかを除外することができます知っている
id name characteristic value isList
1 cube sides 6 0
1 cube color blue 0
2 triangle sides 3 0
3 hexagon (null) (null) (null)
4 rectangle (null) (null) (null)
のようなものですが、それは非常に正しい...
を鳴りません誰でも私にこのことを教えてもらえますか? 敬具あなたが実際に、自己のカップルが
select all_ids.id,
all_ids.name,
s.value sides,
c.value color
from shapes_view all_ids
left outer join (select *
from shapes_view
where characteristic = 'sides') s
on(s.id = all_ids.id)
left outer join (select *
from shapes_view
where characteristic = 'color') c
on(c.id = all_ids.id)
それとも、
select id,
name,
max(case when characteristic = 'sides'
then value
else null
end) sides,
max(case when characteristic = 'color'
then value
else null
end) color
from shapes_view
group by id, name
に抽出するために必要なクエリの複雑さを、データをピボット可能に合流join--自己を使用することができます