0

2 つのテーブル x と y。

table x (id, a, b, c)
1, aval1, bval1, cval1
2, aval2, bval2, cval2

table y (xid, key, otherval)
1, ABC, y1
1, DEF, y2
1, GHI, y3
2, ABC, y4
2, GHI, y5

私が欲しいもの -

x.id, x.a, x.b, x.c, ABC, DEF, GHI
1, aval1, bval1, cval1, y1, y2, y3
2, aval2, bval2, cval2, y4, -, y5

やりたくないこと -

select
    x.id,
    a,
    b,
    c,
    ABC.otherval,
    DEF.otherval,
    GHI.otherval
from
    x,
    y ABC,
    y DEF,
    y GHI
where
    x.id = ABC.xid
    and x.id = DEF.xid
    and x.id = GHI.xid
    and ABC.key = 'ABC'
    and DEF.key = 'DEF'
    and GHI.key = 'GHI';

別の方法はありますか?同じテーブル 'y' を 3 回スキャンしたくありません。

4

2 に答える 2

0

これを試して:

select 
x.*,
(select y.otherval from y where x.id = y.xid and y.key = 'ABC') as ABC ,
(select y.otherval from y where x.id = y.xid and y.key = 'DEF') as DEF ,
(select y.otherval from y where x.id = y.xid and y.key = 'GHI') as GHI 
from x;
于 2013-10-22T08:20:54.490 に答える