7

以下の SQL クエリの '1=2'の意味を誰か説明してください。

SELECT E.EmpID,
       E.EmpName,
       Country = CASE
                   WHEN T.Active = 'N'
                        AND 1 = 2 THEN 'Not Working Anymore'
                   ELSE C.Country_Name
                 END,
       T.Contract_No
FROM   Employees E (nolock)
       INNER JOIN Contract T
         ON T.Contract_No = E.Contract_No
       LEFT JOIN Country C (nolock)
         ON E.Country_ID = C.Country_ID 

ありがとう

編集:-私が提供したSQLクエリの例に存在するわずかな間違いを修正しました。@ ALL :- ここで言及されているクエリは、何かを再解決する必要がある大きな作業クエリのサンプル バージョンです。質問を簡単にするために、SQL クエリのサンプル シナリオを作成しました。

4

10 に答える 10

21

別のテーブルからテーブルを作成しているが、行をコピーしたくない場合は、句のこの1=2部分を使用すると便利です。WHERE例えば:

CREATE TABLE ABC_TEMP AS
    SELECT * FROM ABC WHERE 1=2;
于 2013-09-03T20:50:56.907 に答える
7
when T.Active = 'N' and 1=2 then 'Not Working Anymore' 

簡単に言えば、上記の状態になることはありませんtrue。したがって、結果は常にC.Country_Name

于 2013-03-01T13:28:08.570 に答える
6

これは、SQL フィルター句の動的な構築で使用される一般的なトリックです。これにより、「1 = 2」が常に追加されるため、後続の句に必要なチェックなしで「T.Active = 'N' and」の自動構築が可能になります。

更新: 1=1 と 1=2 のどちらが使用されるかは、自動化された句の作成に使用される正規形が連言または選言のどちらであるかによって異なります。この場合、設計と実装のミスマッチがあったようです。

Update 2 ほとんどの開発者は、主要な用語が AND で結合された結合標準形を好むと思いますが、論理和標準形は、表現力とコードのサイズにおいて同等です。

于 2013-03-01T13:26:56.527 に答える
4

FALSE引数に対応します。

例えば ​​;

select * from TABLE where 1=2

ゼロ行を返します。

于 2013-03-01T13:25:37.607 に答える
2

行を取得したくないWHERE 1=2 場合に使用します。

1=2いつものようにfalse

于 2013-03-01T13:26:28.493 に答える
1

それはデバッグスクリプトだと思います。ケースの負の部分を常に返すためにあります。おそらくリリース時にその部分が取り出されます。

于 2013-03-01T13:27:14.903 に答える
1

と 1=2 を追加すると、そのケースは常に false を返します。なぜそこにあるのかを知るには、そこに置いた人に尋ねてください。

作成者が最初の条件を強制的に false にし、それを削除するのを忘れたために、そこに配置されたのではないかと思います。

于 2013-03-01T13:26:49.977 に答える
1

1 = 2 は、常に false になる条件を指定していることを意味します。したがって、行のレコードは表示されません ('NULL')...

つまり、テーブル empt_tgt AS を作成します。 empno、ename、job、mgr、sal WHERE 1=2; を選択します。

次に、次のステートメントを実行するときに、empt_tgt にこれらすべての列のレコードがあると仮定します。 SELECT * FROM empt_tgt

EMPT_TGT は null になります。つまり、列名 empno、ename、job、mgr、sal no data のみが表示されます...

于 2016-10-04T23:30:18.230 に答える
0

これは、会社のいくつかのコードで見つかりました。私たちの場合、通常、誤って DEBUG コードとして残されます。開発者は、例のように見えるプレースホルダーとして使用できます。

于 2019-02-19T14:06:17.237 に答える