-8

次のようにSQL Serverでプロシージャを作成しています。

select 
  column1, 
  column2... 
from 
  table 
where 
  column1 = abc 
  and column2 = 245  
  and condition3 
  and condition4

しかし、SELECT条件に失敗した値を選択しているため、選択を制限する必要があります。例えば:

column1 column2
 abc    123
 cdf    245
 ghi    678
4

2 に答える 2

4

あなたの投稿には不完全な情報がありますが、私はこれを突き刺します.

justAND演算子のチェーンでは、返されるすべての行に対してすべての式が true と評価される必要があります。これは重力と同じくらい基本的なことです。

要するに、AND機能しますが、期待どおりに機能しません。

ここで起こっている可能性が高いのは、質問に関連していないと思われる他の式がクエリに含まれていることです。

例えば

SELECT Column1,
       Column2,
       Column3
FROM myTable
WHERE Column1 = 'abc'
   AND Column2 = 123
   AND column3 = 'zyx'
   OR Column3 = 'xyz'

以下とは論理的に完全に異なります。

SELECT Column1,
       Column2,
       Column3
FROM myTable
WHERE Column1 = 'abc'
   AND Column2 = 123
   AND (column3 = 'zyx'
   OR Column3 = 'xyz')

最初の例では、一般的に受け入れられている操作の順序は、クエリを次のように評価します。

 (Column1 = 'ABC AND Column2 = 123 AND column3 = 'zyx')

上記のすべてが真でなければならないことを意味します

 OR Column3 = 'xyz'

ANDケース 1 では、操作が true と評価されるかどうかに関係なく、column3 が「xyz」に等しいすべての行が返されます。and 演算または OR 演算のいずれかが true の場合は、私に行を与えてくださいと言っています。

SQL で式を別の方法で評価する場合は、ケース 2 のように括弧を使用して優先度を指定する必要があります。

詳細については、msdn operator precedenceを参照してください。AND は OR よりもずっと前に評価されることがわかります。

また、実際のクエリを投稿していただければ、問題の正確な場所についてヘルプでより具体的に説明できます。

于 2013-02-28T20:48:03.710 に答える
0

構文が正しくない可能性があります。これにより、各述語の述語の片側に「AND」が適用されます。たとえば、('123' AND column2) は、column2 が 0(false) または Null でない限り true を返します。述語を括弧で囲んでみてください。少なくとも、SQL Server が正しい方向を示すエラーをスローする可能性があります。

于 2013-02-28T20:47:54.577 に答える