1. ホーム
  2. sql

[解決済み] SQL文にWHERE 1=1を使用する目的は何ですか?[重複しています]。

2022-03-05 14:20:55

質問

<ブロッククオート

重複の可能性があります。
なぜSQLクエリに "where 1 = 1 "があるのでしょうか?
なぜSQLの句でWHERE 1=1 AND <conditions>を使用するのでしょうか?

いろいろなクエリの例でよく見かけますが、おそらくすべてのSQLエンジンに通じます。

条件が定義されていないクエリがある場合、人々は (特に ORM フレームワーク)、常に真である条件を追加することがよくあります。 WHERE 1 = 1 とか、そんな感じです。

だから、代わりに

SELECT id, name FROM users;

を使用しています。

SELECT id, name FROM users WHERE 1 = 1;

唯一考えられる理由は、動的に条件を追加している場合、最初の AND が、それでもかなりの頻度でこの 1 = 1 の条件は、クエリに実際の条件がある場合は取り除かれます。

CakePHPの実例(フレームワークで生成)。

(条件なし)

SELECT `User`.`id`, `User`.`login`
FROM `users` AS `User` WHERE 1 = 1 
ORDER BY `User`.`id` ASC;

(条件付き)

SELECT `User`.`id`, `User`.`login`
FROM `users` AS `User` 
WHERE `User`.`login` = '[email protected]'
LIMIT 1;

この条件を追加した理由は何でしょうか?

どのように解決するのですか?

ああ、典型的には『where 1 = 0』で始まるから、強制的にステートメントを失敗させるんだ。

クエリのテストのために、トランザクションでラップして、最後にコミットしない方が、より素朴な方法だと思います。(これは望ましい方法です)。