2016-08-11 15 views
2

誰かが私を助けてくれることが期待されるサブクエリに問題があります。1つ以上の値のSQLサブクエリ

私は次のことを実行する場合:

select t4.code from OITM T0 
INNER JOIN DLN1 T1 ON T1.[ItemCode] = T0.[ItemCode] 
INNER JOIN ODLN T2 ON T2.[DocEntry] = T1.[DocEntry] 
INNER JOIN ITM10 T3 ON T3.[ItemCode] = T0.[ItemCode] 
LEFT JOIN ODCI T4 ON T4.[AbsEntry] = T3.[ISCommCode] 
WHERE T2.DocEntry = '7060' 

結果は次のとおりです。

いくつかのケースではではない複数の値が所望のものと一致した行と他の人があるかもしれませんが、同時。

私は、これらの結果に対してチェックし、任意の行の[コード]列には、特定の何かが含まれていない場合は、メッセージを表示するようにサブクエリを持つクエリを書かれている:

IF(
(SELECT 
    T4.Code 
FROM OITM T0 
INNER JOIN DLN1 T1 ON T1.[ItemCode] = T0.[ItemCode] 
INNER JOIN ODLN T2 ON T2.[DocEntry] = T1.[DocEntry] 
INNER JOIN ITM10 T3 ON T3.[ItemCode] = T0.[ItemCode] 
LEFT JOIN ODCI T4 ON T4.[AbsEntry] = T3.[ISCommCode] 
WHERE T2.DocEntry = '7060') NOT IN ('22030010','22030001','22030009') 
) 
BEGIN 
SELECT 'MESSAGE' 
END 

明らかにこれはコンパイルされません

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. 

HAVING、彼らは明らかに間違っているメッセージを表示せずにコンパイルとしてCOUNTが動作しません:それは以上の1行を返すことがある場合。

これが可能ですか、間違ったツリーを吠えますか?

多くのありがとうございます。このような行があるかどうかをチェックするために

+1

方法だけクエリに 'WHERE'句を追加することについてはどうですか? –

答えて

1

、あなたはEXISTSを使用することができます。

IF EXISTS (SELECT ...) 

をあなたのケースでは、私が選択distinctになるだろう一度だけ特定の値を返すために:

select DISTINCT t4.code from OITM T0 ... 

UPDATEを

@gordon-linoffが指摘したように、このような電子の不要な値:

select distinct t4.code from OITM T0 
... 
where T2.DocEntry = '7060' and t4.code not in ('22030010','22030001','22030009') 
-- using AND instead of): ^^^ 
-- so one (will be enough between EXISTS and SELECT 

は一緒にそれを置く:

IF EXISTS(SELECT .... where T2.DocEntry = '7060' and t4.code not in ('22030010','22030001','22030009')) 
BEGIN 
    ... 
END 
+0

これまでのご協力ありがとうございます。 EXISTSに続く構文を教えてください。 IF EXISTS(...)を使用すると、NOT INの構文エラーが発生します。... ... – coblenski

+1

これは@ gordon-linoffの意味です。 'T4.Code ... WHERE T2.DocEntry = '7060' AND T4.code NOT IN( '22030010'、 '22030001'、 '22030009')'サブクエリを正しく実行させる方法です。投稿への更新の追加 –

+0

私はこれがうまくいくとは思わない。それはコンパイルされますが、メッセージは表示されません。 – coblenski

関連する問題