2015-10-07 114 views
0

我目前在過濾我的SQL記錄時遇到了麻煩。我需要類似於以下概念的結果:MS SQL:SELECT field1,field2 from [table] where field2 NOT IN('val1',val2')when field1 ='value2'

我想根據同一個表中另一個字段的結果得到一些記錄的結果。再說了,像下面這樣:

SELECT [Field1], [field2] 
FROM [table] 
WHERE [Field1] IN ('value1', 'value2') 
--from 'value2' i need to filter or remove some records 
WHERE [field2] NOT IN ('val1','val2') When [Field1] is 'value2' 

我已經在這花了很多的時間我還是不能做正確的東西。 我希望得到即時的幫助。

回答

1

與頂端回答開始(@ Siyual的),則可對其進行優化,以減少維修:

SELECT [Field1], [field2] 
FROM [table] 
WHERE ([Field1] = 'value2' AND [field2] NOT IN ('val1','val2')) 
OR  ([Field1] = 'value1') 

使用[Field1] = 'value1'[Field1] in('value1', 'value3', 'value...', 'valueN')意味着,只要有新值放入[Field1],查詢中斷。你會好得多,以取代與[Field1]!='value2',給你:

SELECT [Field1], [field2] 
FROM [table] 
WHERE ([Field1] = 'value2' AND [field2] NOT IN ('val1','val2')) 
OR  ([Field1] != 'value2') 

從那裏,你也可以將邏輯運算符意識到,你說WHERE (A && B) || !A,在這種情況下,有一個XOR沒有什麼區別或OR,這意味着它等同於WHERE (!A)||B,它給你:

SELECT [Field1], [field2] 
FROM [table] 
WHERE ([Field1] != 'value2') OR [field2] NOT IN ('val1','val2')) 
+0

實際上是最佳答案是最接近的一個。我只是想知道我還缺少什麼。 – moraler

+0

我重新整理了整篇文章,以更好地解釋我的觀點。基本上,我和@Siyual做同樣的事情,所以只要你不添加任何新的數據,我們的兩個查詢都應該完全一樣。 –

+0

感謝!我明白你的意思,但它並沒有給我我想要的結果。 我想得到的是從第一個過濾器的一些結果到我的下一個過濾器。就像 其中[field1] IN(從另一個表中選擇DISTINCT類別) - 第一個過濾器的結果將成爲第二個過濾器的基礎..如果類別包含「value2」,我將必須過濾field1爲值2的記錄,排除顯示具有「val1」和「val2」的記錄,以便使用那些將被過濾的記錄是[field1]中等於value2的那些記錄 – moraler

1

兩個字段的小邏輯。

SELECT [Field1], [field2] 
    FROM [table] 
    WHERE [Field1] IN ('value 1' , ...) -- Other non value 2 values 
     OR (Field1 = 'Value 2' AND [field2] NOT IN ('val1','val2')) 
+1

這其實不是幫助其他「[字段1] IN('值1,‘值’)」其實是這樣的.. [字段1 ] IN(來自[TABLE2]的SELECT DISTINCT [field]) 因此,值2實際上是另一個查詢的一部分。 – moraler

+0

Moraler,它是一個很好的想法,可以考慮您想要過濾的邏輯。如果你可以把它寫成一個簡單的句子,那麼你可以生成你的where子句。 – StoicFnord

+0

我其實也是。我仍然無法弄清楚。大聲笑! 這是這一個。 – moraler

1

您將需要分離每個條件的邏輯。

SELECT [Field1], [field2] 
FROM [table] 
WHERE ([Field1] = 'value2' AND [field2] NOT IN ('val1','val2')) 
OR  ([Field1] = 'value1') 
1

不清楚你真正想要什麼。

但我的猜測

SELECT [Field1], [field2] FROM [table] 
WHERE [Field1] in ('value1', 'value2') 
and [field2] !=(case 
when [Field1]='value1' THEN 'val1' 
when [Field1]='value2' THEN 'val2' 

. 
. 
. 
End) 
相關問題