2016-06-16 6 views
2

私の同僚の古いプロジェクトに取り組んでおり、私は彼女のコードWHERE TRUE AND ID='1' AND STAT='1'にあります。 TRUE ANDを削除して、クエリがWHERE ID='1' AND STAT='1'になり、同じ結果になるようにしました。このようWHERE FLAG = TRUEthis MySQL documentation state thatMySQLで 'WHERE TRUE'の使用方法

として

私は「何かが真であるところ私たちが検索するブール値としてTRUEを使用することができます知ってTRUEとFALSE定数は、それぞれ、1と0に評価されます。定数名は、任意の文字で書くことができます。

私もSELECT * FROM MYTABLE WHERE TRUEを試してみましたが、それは彼女のクエリでTRUEの目的が何であるかをSELECT * FROM MYTABLE

としてちょうど同じですか?

答えて

2

特定の機能的な目的はありません。あなたの同僚は、すべてのSELECTクエリに明示的なWHERE句があることを推奨する特定のスタイルガイドを遵守していれば、同僚がそれを含むかもしれません。明示的なWHERE句が指定されていない場合、デフォルトではすべての行が選択されます。常にtrueのWHERE句を追加すると、同じ効果が得られます。

このクエリが発生する別の方法は、WHERE句が書き込まれたために常にWHERE句に書き込まなければならないコード生成ツールによって生成された場合です。例えば

は:

myQuery = "SELECT X FROM Y WHERE " + ConditionMet(data)?" AccountID = '" + AcctId + "'" : "1=1"; 

これはConditionMet(データ)が真である場合には、唯一のアカウントIDは、あなたが渡しているAcctIdと一致する行を返すことを意味し、それがfalseの場合、すべての行を返します。

「ダミー」1 = 1を追加すると、コード生成が簡単になります。

同様に、常に偽のWHERE句(たとえば、「WHERE 1 = 0」)を追加すると、ゼロ行が返されます。

関連する問題