0

私は2つのテーブルTableAを持っています

id    name
1     asd
2     afg
3     qwe
4     dsf

表B

id    desc    uni
1     kfgh    asad
1     oiuy    asad
1     wert    asad
3     wewe    sfds
4     lkjh    qwer
4     poiu    qwer

uni内部結合を試みたときに、これらの両方のテーブルを結合して列の値を取得したい

SELECT     uni FROM      tableA as A JOIN tableB as B  ON  A.id = B.id

ID 1の行が3回あることに気づいたように、TableBのすべての行が表示されます。これは大きなクエリの小さな部分であり、この結合ステートメントはクエリ全体に影響するため、ここではdistinctを使用できません。どのような結合を試みる必要があるか。

4

2 に答える 2

1

サブクエリを使用して、必要な個別のビットを取得します

SELECT DISTINCT id, uni FROM tableb

それで

SELECT     
  uni 
FROM
   tableA as A 
JOIN (
       SELECT DISTINCT id, uni FROM tableb
     ) as B  
ON  A.id = B.id

tableA のすべての行が必要な場合はEDIT - 左結合を使用する必要があります

SELECT     
  a.id, 
  b.uni 
FROM
   tableA as A 
LEFT JOIN (
       SELECT DISTINCT id, uni FROM tableb
     ) as B  
ON  A.id = B.id
于 2013-06-11T09:50:55.473 に答える
0

あなたのテーブルは正規化されていないようです。特に、それらは第 2 正規形に違反しているように見えます。

これを修正するには、テーブル構造を次のように変更する必要があります。

表A

id    name
1     asd
2     afg
3     qwe
4     dsf

テーブルユニ

id    uni
1     asad
3     sfds
4     qwer  

テーブルの説明

id    desc
1     kfgh
1     oiuy
1     wert
3     wewe
4     lkjh
4     poiu

そして、次のクエリを使用します。

SELECT unis.uni FROM tableA AS A JOIN tableUnis AS unis ON A.id = unis.id
于 2013-06-11T09:52:51.620 に答える