1

次の 2 つの mySQL select ステートメントを組み合わせて、それぞれを異なる列で同じテーブルに入れるにはどうすればよいですか?

select a.property as p1 from T1 a inner join T2 b on a.id = b.id1;

select a.property as p2 from T1 a inner join T2 b on a.id = b.id2;

これらの各ステートメントは個別に機能し、同じ数の行を返します。同じテーブルの 2 つの列で両方の結果を取得したいだけです。

4

2 に答える 2

2

このような単一のステートメントで使用します

select 
     case when a.id=b.id1 then a.property end as p1,
     case when a.id=b.id2 then a.property end as p2
from 
     T1 a inner join T2 b on a.id in (b.id1,b.id2)
于 2012-07-23T09:28:42.193 に答える
0

このソリューションを使用できます:

SELECT
    a.property AS p1, b.property AS p2
FROM
(
    SELECT a.property, @rn1:=@rn1+1 AS rn
    FROM T1 a
    INNER JOIN T2 b ON a.id = b.id1
    CROSS JOIN (SELECT @rn1:=0) var_init
) a
INNER JOIN
(
    SELECT a.property, @rn2:=@rn2+1 AS rn
    FROM T1 a
    INNER JOIN T2 b ON a.id = b.id2
    CROSS JOIN (SELECT @rn2:=0) var_init
) b ON a.rn = b.rn

編集:これは、より単純なMadhivananのソリューションのバリエーションです。

SELECT   MAX(CASE WHEN a.id=b.id1 THEN a.property END) AS p1,
         MAX(CASE WHEN a.id=b.id2 THEN a.property END) AS p2
FROM     T1 a 
JOIN     T2 b ON a.id IN (b.id1,b.id2)
GROUP BY a.id

GROUP BY と MAX を追加して、 ごとidに 2 つの行を取得しないようにし、各グループの null 以外の値を取得する case 式の最大値を選択するだけです (基本的に、各列のプロパティを同じ各行id)。

于 2012-07-23T09:40:58.167 に答える