5

T12 つの列 (XY) が IDであるテーブル ( ) があります。これらの対応する の名前idは、別の表 ( T2) の列にありますname

そのときだけ使用していたと仮定するとX、単純な内部結合で名前を取得する際の問題が解決したはずです。

そのような

Select T1.somedata,T1.somedata1,T2.name from T1
Inner Join T2 ON T1.X=T2.id

しかし、名前を解決したい場合はどうすればいいですT1.Yか? name、内部結合はどちらに解決しますか??

Select T1.somedata,T1.somedata1,T2.name from T1
Inner Join T2 ON T1.X=T2.id
Inner Join T2 ON T1.Y=T2.id

上記のクエリは間違っています。とのname両方に対応するもののT1.Xを取得できますか?T1.YINNER Join

-初心者

4

4 に答える 4

6

テーブルと列には常にエイリアスを追加することをお勧めします。したがって、どのデータが選択されているかを確認できます。

select
    T1.somedata,
    T1.somedata1,
    T2X.name as XName,
    T2Y.name as YName
from T1 as T1
    inner join T2 as T2X on T2X.id = T1.X
    inner join T2 as T2Y on T2Y.id = T1.Y
于 2012-10-26T07:02:48.647 に答える
2

これにより、両方の名前が別々の列として選択されます。

Select T1.somedata,T1.somedata1,T2a.name, T2b.name 
from T1
Inner Join T2 as T2a ON T1.X=T2a.id 
Inner Join T2 as T2b ON T1.Y=T2b.id

次の例では、結果セットに 2 つのレコードが生成されます。

Select T1.somedata, T1.somedata1, T2.name
from T1
Inner Join T2 ON T1.X=T2.id Or T1.Y=T2.id
于 2012-10-26T07:03:54.680 に答える
1

T2あいまいさを避けるために、テーブルを 2 回結合し、名前にエイリアスを指定する必要があります。

SELECT  a.*, 
        b.name as NameB, 
        c.name as NameC
FROM    T1 a
        INNER JOIN T2 b
            ON a.x = b.id
        INNER JOIN T2 c
            On a.y = c.id
于 2012-10-26T07:04:00.297 に答える
0

あいまいさを避けるために、テーブル T2 を 2 回結合し、名前にエイリアスを指定する必要があります。

SELECT  a.*, 
        b.name as NameB, 
        c.name as NameC
FROM    T1 a
        INNER JOIN T2 b
            ON a.x = b.id
        INNER JOIN T2 c
            On a.y = c.id
于 2013-10-17T07:05:46.567 に答える