0

さまざまなテーブルにデータが存在するかどうかをまとめて確認しようとしています。メイン テーブル A と、A に関連するデータを含むさまざまなテーブルがあります。それらをテーブル B、C、および D と呼びます。A の各エントリに対して、行があるかどうかを示す単一のクエリを記述したいと考えています。 B、C、Dそれぞれにあります。

これに対する最初の試みは次のとおりです。

SELECT A.id, count(B.id) as b_count, count(C.id) as c_count, count(d.id) as d_count
FROM A
LEFT JOIN B ON B.a_id = A.id
LEFT JOIN C ON C.a_id = A.id
LEFT JOIN D ON D.a_id = A.id
GROUP BY A.id

これにより、正しい結果が得られます-メインテーブルのidでリストされた各サブテーブルの行数。ただし、このクエリは複数の結合を伴うため、信じられないほど非効率的でもあり、行が存在するかどうかだけで、各サブテーブルに行がいくつあるかはあまり気にしません。

誰かがより良い代替案を提案できますか?

4

2 に答える 2

1

テーブルにある行の数を気にしない場合

使用する:

SELECT EXISTS(SELECT 1 FROM table1 WHERE ...)

MYSQL ドキュメントを参照してください: http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html

于 2013-04-16T18:34:32.577 に答える