10

私は維持しているいくつかのクエリを実行していましたが、プログラマーが「where 1=1」というクエリを入力しましたが、これは常に true と評価されるようです。

これには利点がありますか?

重複: SQL 句で WHERE 1=1 AND を使用するのはなぜですか?

その質問は、この質問に対する答えではありません。

Where句:

select * from table where 1=1 and sStatus not in ('status1','status2','status3')

そこにandをプッシュするプログラミングやifステートメントはありません。ストレートなクエリ。

もしこれをアンクローズしていただけるなら、不要であれば 1=1 を書き直して削除する目的があるかどうかを知りたいです。

4

7 に答える 7

19

動的クエリでしたか。オプションのパラメーターに基づいて動的クエリを作成するときに、これが役立つ場合があります。

于 2009-02-05T18:09:17.273 に答える
16

クエリに制限を自動的に追加したい場合は、作業が楽になります。

string sql = "SELECT * FROM table WHERE 1=1";

if (someflag) {
  sql += " AND valid = 1";
}

if (someotherflag) {
  sql += " AND special = 1";
}

execute(sql);

なしWHERE 1 = 1では、それぞれの場合に、それが最初に追加した制限であるか (そして を使用WHERE ...)、または以前に他の制限を追加したか (そして を追加AND ...) を確認する必要があります。

于 2009-02-05T18:15:14.360 に答える
12

where 句を動的に作成する場合は、少し怠惰になり、追加するすべての句に「AND」を前に付けることができると想定できます。

$str="select foo from bar where 1=1";

if ($filter1)
{
    $str.=" and col1='frobozz'";
}
于 2009-02-05T18:13:45.313 に答える
6

遅延プログラミングを行っているときに動的 where 句にこれを使用し、動的句の間に「AND」が必要かどうかを判断するために句が空かどうかを常にチェックしたくない場合。

于 2009-02-05T18:12:45.270 に答える
4

これは、動的クエリでのみ意味があります。WHERE が既に存在するかどうかを確認する代わりに、ループにパラメーターを追加する場合は、毎回 AND Column = Value を追加するだけです。

于 2009-02-05T18:13:08.450 に答える
1

これには 2 つの理由があります。常に真の結果が必要な場合、またはステートメントに任意の数の「and condition = value」が追加される場合です。

于 2009-02-05T18:10:42.760 に答える
0

それは非常に興味深いです... WHERE 句には 1=1 しか含まれていません。 xyz="something" OR 1=1; これは、常に結果のリストを返す手段としてWHERE 句が設定されている SQL インジェクションの試みでよく見られ ます。

このクエリで何が起こっているかについて詳しく教えていただけますか?

  • ニコラス
于 2009-02-05T18:13:47.793 に答える