通常、クエリステートメントで条件が不要な場合は、WHERE
句を使用しません。しかし、私はWHERE 1
句は、他の条件が存在しない場合でも、多くの場所で使用されています。
WHERE 1=1
これに似ていますか?基本的にはAND...
を使用して追加の条件を追加でき、実行時間に影響を与えないため、プログラマーの便宜のためだけです。
Stackoverflowへの次のリンクを確認してください。
WHERE 1
はWHERE 1=1
と同じであることに注意してください。どちらもWHERE TRUE
を意味しますが、前者は実際にはブール値ではないため、多くのデータベース管理システムによって拒否されています。
私の主な用途は、クエリの開発中に、コメントアウトしやすくすることです。私は,
とand
's:
SELECT
A
-- ,B
,C
,D
-- ,E
FROM TABLE
WHERE 1=1
-- and B='This'
and C='That'
-- and D is not null
また、プログラムで最後までやり取りするのが簡単になります。
this = "SELECT * "
this += "FROM TABLE "
this += "WHERE 1=1 "
if user chooses option a then this += "and A is not null "
if user chooses option b then this += "and B is not null "
if user chooses option b then this += "and C is not null "
if user chooses option b then this += "and D is not null "
それ以外の場合は、最初のオプションを修飾する必要があります...次の各オプションで前のオプションをチェックしてください。ユーザーが前の例でオプションDのみを選択した場合はどうなりますか?あなたはそれを確認する必要がありますif A, B and C aren't chosen
の場合はWHERE
を使用し、それ以外の場合はand
を使用します。 =
最初に、修飾子をステートメントの最後までたたくことができます。
なぜそうするのですか?
あまり能力のないプログラマーによって書かれた動的なコード生成が私の頭に浮かびます。
SELECT .... WHEREを生成し、SOMETHING ....が必要になるため、必要な場合にのみWHEREを追加するのではなく、そこに何もない場合に非制限条件を追加します。それを見た-「専門家」を解雇する責任があります。
または、男だけがどこにあるかが必須です;)
それ以外は見逃しています。
大企業(1万人以上)の他のユーザーが使用する一連のユーザー定義関数をC++/C for PostgreSQLでプログラミングしていました。私の関数にはオプションのwhere
パラメータがあります。値が指定されていない場合、句は使用されませんでした。これは明示的に文書化されました。残念ながら、誰もこの機能を使用しておらず、where 1=1
句。理論的にはこれは賢明ではないようですが、事実上すべてのクエリオプティマイザーはこれらのタイプのステートメントを除外します。また、1万人を教育することは困難です。
"where 1 = 1"を使用すると、動的SQL 'where'句の生成に必要なコードの複雑さが軽減されます。そうでない場合、「where」句を作成するときに、これが追加された各コンポーネントの最初のコンポーネントであるかどうかを確認する必要があります。これは、コードの複雑さを軽減するための単純なコードパターンであり、可能な場合はほとんど常に正しい決定です。
DataGripやIntellijのデータベースプラグインなどの一部のツールは、update
またはdelete
クエリにwhere
句がない場合、安全でないクエリ警告で実行を停止します。これは手動で無効にすることができますが、コンソールで作業して警告を受けたいがそのようなスクリプトを頻繁に実行する場合は、常にtrueに解決されるものを追加するのが最も簡単なオプションのようです。
このような状況で、実行時にクエリを作成する必要があり、それが短い場合も長い場合もある場合、「where 1 = 1 AND」を使用します
string criteria =string.Empty;
if (txtc1.Text != "")
{
criteria += "criteria1=" + "'" + txtc1.Text + "' ";
}
if (txtc2.Text != "")
{
criteria += "OR criteria2=" + "'" + txtc2.Text + "' ";
}
if (ddl1.SelectedItem.Text != "")
{
criteria += "OR criteria3=" + "'" + ddl1.SelectedItem.Text + "' ";
} if (ddl2.SelectedItem.Text != "")
{
criteria += "OR criteria4=" + "'" + ddl2.SelectedItem.Text + "' ";
}
if (ddl3.SelectedItem.Text != "")
{
criteria += "OR criteria5=" + "'" + ddl3.SelectedItem.Text + "' ";
}
if (ddl4.SelectedItem.Text != "")
{
criteria += "OR criteria6=" + "'" + ddl4.SelectedItem.Text + "' ";
}
if (txtc1.Text == "")
{
//criteria = criteria.Substring(2);
criteria = criteria.Substring(2,criteria.Length-3);
}
if (criteria != string.Empty)
{
criteria = "where 1=1 AND " + criteria;
//Response.Write("<script>alert('query constructed by you is : '+'" +criteria+ "');</script>");
Response.Write(criteria);
}
物事を簡単にする