回答:
基本的には、プログラマーの利便性のためだけで、AND...
その後追加の条件を追加するだけで、実行時間には影響しません。
Stackoverflowへのこれらのリンクを確認してください。
はとWHERE 1
同じであることに注意してくださいWHERE 1=1
。両方とも意味しますWHERE TRUE
が、前者は実際にはブール値ではないとして多くのデータベース管理システムによって拒否されます。
私の主な用途は、クエリの開発中に簡単にコメントアウトできるようにすることです。私は鉛,
のとand
の:
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のみを選択した場合はどうなりますか?else useをif A, B and C aren't chosen
使用することを確認する必要がありWHERE
ますand
。で=
開始時に、あなただけの文の最後に修飾子を平手打ちすることができます。
code
SSMSまたは類似のクエリツールの最初のブロックに似ています。データセットを調査し、適切な結果を取得してから、エンドユーザー向けのレポートツール(Crystal Reportsなど)に導入します。2番目のブロックは、私の仕事が生のsqlアクセスにあまり依存していないため、他の人が見ていることです。私は他の人々の同様のコードのトラブルシューティングを行い、その理由を理解できます。(コードはVB、C#およびPHPでした)。
私は大企業の他の人々(1万人以上)が使用するPostgreSQL向けのC ++ / Cでユーザー定義関数をプログラミングしていました。私の関数にはオプションのwhere
パラメーターがあります。値が指定されていない場合、句は使用されませんでした。これは明示的に文書化されました。残念ながら、この機能を使用している人はいませんし、where 1=1
条項を提供するだけの人もいます。理論的にはこれは賢明ではないように見えますが、事実上すべてのクエリオプティマイザーはこれらのタイプのステートメントを除外します。そして、10,000人の人々を教育することは困難です。
WHERE 1=1; DROP TABLE CUSTOMERS
ませんか?
このような状況で、実行時にクエリを作成する必要があり、それが短くても長くてもよい場合、「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);
}
物事を簡単にする