當我用下面的查詢工作:不給自己留多案例子查詢結果使用IN
SELECT *
FROM TableA a
WHERE a.FieldA IN (
CASE
--select subquery returns a single value
WHEN a.FieldB = 'Value1'
THEN (select b.ID from TableB b where b.FK_Field = '123')
--select subquery returns multiple values
WHEN a.FieldB = 'Value2'
THEN (select c.ID from TableC c where c.FK_Field = '123')
END
)
第一種情況SELECT語句只返回一個b.ID
。如果我只是有這樣的說法,我的代碼就可以工作。
但是,第二種情況說明會返回多個c.ID
s。當我再補充一點檢查,我得到以下錯誤:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
如果我不得不WHERE a.FieldA =
,那麼據我所知,子查詢只能返回值爲1。然而,我有WHERE a.FieldA IN
,那爲什麼它會抱怨如果有多個值返回?
我該如何實施這種檢查?
T-SQL中的CASE是一個**表達式**(如'a + b'),它返回一個**單一的原子值** - 您無法**使用它來選擇性地運行SQL片段返回整個結果集... –
@marc_s我想那麼這個錯誤將落入類*當子查詢用作表達式*。你有什麼建議,我可以做這種檢查,而不使用'CASE'或以某種方式允許多個結果? –
也許[這](http://stackoverflow.com/a/10260297/92546)答案將提供一些見解。 – HABO