0

私は 4 つのテーブルを持っていa,b,c,dます。表aには のペアがありid, nameます。表bには のペアがありidx, idyます。はb.idytable から来ますa.id。テーブルには、 table に関連するc, dペアがあります。id, valueb.idx

次のようなクエリを実行する必要があります。

SELECT c.value, d.value 
FROM a,b,c,d
WHERE a.name = "test" AND b.idy = a.id AND (c.id = b.idx AND d.id = b.idx)

問題は、テーブルに欠落しているレコードがある場合があるc, dため、レコードが返されないことですが、またはANDで利用可能な場合は結果が必要です。また、両方のテーブルに対しても他の行を返すため、使用できません。cdOR

UNIONを使用するか、単にネストされたsを使用するソリューションがあると思いSELECTます。JOIN私は分割帖を使用しないか、使用しないことを好みます。

前もって感謝します!

アップデート:

使用を避ける理由JOINはパフォーマンスです。私が現在取り組んでいる構造は、これよりもはるかに複雑であるためJOIN、将来的に深刻なパフォーマンスの問題が発生することは確実です.

4

3 に答える 3

2

を使用したいと思いますLEFT JOIN

SELECT c.value, d.value 
FROM a
LEFT JOIN b
    ON a.id = b.idy
LEFT JOIN c
    ON b.idx = c.id
LEFT JOIN d
    ON b.idx = d.id
WHERE a.name = "test" 

コンマ結合構文を使用するにはINNER JOIN、すべてのテーブルでレコードを使用できる必要があります。

構文を確認する際に助けが必要な場合JOINは、役立つガイドがあります。

SQL 結合の視覚的な説明

于 2012-09-20T17:47:40.367 に答える
1
select c.value, d.value
from a
inner join b on b.idy = a.id
left outer join c on c.id = b.idx
left outer join d on d.id = b.idx
where a.name = "test" 
    and coalesce(c.id, d.id) is not null
于 2012-09-20T17:46:14.537 に答える
1
SELECT c.value, d.value 
FROM a,b,c,d
WHERE a.name = "test" AND b.idy = a.id AND (c.id = b.idx AND d.id = b.idx)
UNION
SELECT c.value, NULL
FROM a,b,c
WHERE a.name = "test" AND b.idy = a.id AND c.id = b.idx AND NOT EXISTS( SELECT NULL FROM d where d.id = b.idx )
UNION
SELECT NULL, d.value
FROM a,b,d
WHERE a.name = "test" AND b.idy = a.id AND d.id = b.idx AND NOT EXISTS( SELECT NULL FROM c where c.id = b.idx )
于 2012-09-20T17:53:59.770 に答える