1

言う

Table A             Table AB         Table B
+----+---------+    +-----+-----+    +----+-----+
| id | name    |    | ida | idb |    | id | age |
+----+---------+    +-----+-----+    +----+-----+
|  1 |   'one' |    |   1 |   3 |    |  3 |   3 |
+----+---------+    +-----+-----+    +----+-----+
|  2 |   'two' |    |   2 |   4 |    |  5 |   5 |
+----+---------+    +-----+-----+    +----+-----+
|  3 | 'three' |    |   2 |   5 |
+----+---------+    +-----+-----+

What I want           What I get
+---------+------+    +---------+------+
| name    | age  |    | name    | age  |
+---------+------+    +---------+------+
|   'one' |    3 |    |   'one' |    3 |
+---------+------+    +---------+------+
|   'two' |    5 |    |   'two' |    5 |
+---------+------+    +---------+------+
| 'three' | NULL |    |   'two' | NULL |
+---------+------+    +---------+------+
                      | 'three' | NULL |
                      +---------+------+

私のSQLは

SELECT A.name, B.age
FROM A
LEFT JOIN AB
  ON A.id = AB.ida
LEFT JOIN B
  ON AB.idb = B.id

制約Where:特定の理由やsub-queriesパフォーマンス上の理由からステートメントを使用したくありません。

JOINリレーションABが/のみを使用しON、サブクエリを使用せずに存在するものと一致するレコードのみを取得できる方法はありますか?

4

2 に答える 2

2

グループ化を使用します。

SELECT A.name, Max(B.age)
FROM A 
LEFT JOIN AB 
  ON A.id = AB.ida 
LEFT JOIN B 
  ON AB.idb = B.id 
GROUP BY a.id, a.Name 
order by a.id

または、右結合を使用できます。

select a.name, b.age
from 
    b 
    inner join ab on b.id = ab.idb
    right join a on ab.ida = a.id
于 2012-10-16T08:30:58.583 に答える
2

table との外部結合ではなく内部結合を使用しますB

SELECT A.name, B.age
FROM A LEFT JOIN (
  AB JOIN B ON AB.idb = B.id
) ON A.id = AB.ida

sqlfiddleで参照してください。

于 2012-10-16T08:33:12.273 に答える