テーブルA、B、C、Dをの4つのテーブルがあり、不特定のリレーショナルSQLデータベースとします。 A参照B、CおよびDも同様である。参照は、Aが列A.refX_id = X.idを有し、XがA、BおよびC(共通外部キー1:N)であることを意味する。SELECT ... WHERE IN IN JOIN
私が欲しいのは、すべての子テーブルB、C、Dの列に基づいた条件でテーブルAを照会することです。私の質問はです。 (ユーザビリティ、効率、スピードの面で)
バリアント1:私は、データベースの観点からより好きですが、プログラムには少し難しくなります
SELECT DISTINCT A.* FROM A
JOIN B ON A.refB_id = B.id
JOIN C ON A.refC_id = C.id
JOIN D ON A.refD_id = D.id
WHERE <condition on B> AND <condition on C> AND <condition on D>;
。
バリアント2:
SELECT id FROM B WHERE <condition on B>; # result store to array "BIds" on program side
SELECT id FROM C WHERE <condition on C>; # result store to array "CIds" on program side
SELECT id FROM D WHERE <condition on D>; # result store to array "DIds" on program side
SELECT A.* FROM A
WHERE refB_id IN (<B_ids>) AND refC_id IN (<C_ids>) AND refD_id IN (<D_ids>);
# <B_ids> menas expand whole array of ids, which can result in a very long query string
Iは、バリアント2はcompletellyスマットと潜在的に大きなデータと使用不可であると考えました。しかし、私は聞いたことがありますが、それは相対的に簡単なので、多くのフレームワークが通常それを使用しています。 "IN"句の内容が別のクエリの結果から取得されたことがわかっている場合、一般的にはこのようにデータを照会するのは合法ですか?
ちょうどこの非常に疑問を探していたと、この応答が見つかりました:http://stackoverflow.com/questions/121631/inner-join-vs-where?rq = 1 – CodeJockey