これを行うことで、テーブル自体をクロス結合することを推奨している人々を見てきました。
SELECT *
FROM tbl AS A, tbl AS B
WHERE A.col1 = 1 AND B.col1 = 1
しかし、ここでは、エンジンは tbl のすべての行を 2 回繰り返して、2 つのクエリを A と B の結果に一致させる必要があります。ただし、クエリ (したがって結果) が同じであるにもかかわらずです。
A と B の WHERE が常に同じであると仮定すると、これは無駄です。何かを一度クエリしてから、そのクエリの結果をそれ自体にクロス結合する方法はありますか? このすべてをRAMで実行するのではなく、ディスクへの書き込みが必要になる一時テーブルを避けたいと思います。
私はMySQLを使用していますが、SQLの答えは大いに役立ちます。
例:
tbl が次のようになっているとします。
COL1 COL2
1 A
1 B
1 C
2 D
2 E
col1 = 1 の where 句を実行すると、上記のテーブルの最初の 3 行が返されます。私が欲しいのは次のテーブルですが、2 つのテーブル A と B が同一であるため、where ステートメントの実行は 1 回だけです。
A.COL1 A.COL2 B.COL1 B.COL2
1 A 1 A
1 A 1 B
1 A 1 C
1 B 1 A
1 B 1 B
1 B 1 C
1 C 1 A
1 C 1 B
1 C 1 C