2015-08-14 42 views
-1

我想返回不在FocusRegion Canada中的值,但我仍然想看到其他FocusRegion的所有值。 (但如果你在澳大利亞,那麼你需要有一個FirstPurchaseDate < = 2001-11-19 21:39:12.000)SQL-WHERE子句有多個AND AND NOT IN

這是我的代碼,不能得到它的工作。

SELECT FocusRegion, FirstPurchasedDate 
FROM TabelName 
WHERE FocusRegion NOT IN ('Canada') 
AND (FocusRegion NOT IN ('Australia') AND FirstPurchasedDate <= '2001-11-19 21:39:12.000') 
+5

'WHERE FocusRegion NOT IN('Canada') AND(FocusRegion NOT IN('Australia')OR FirstPurchasedDate <='2001-11-19 21:39:12.000')'我猜 –

+0

我猜@OndřejŠotek'你的評論就是你所得到的,但你的問題不是清晰。你能給出一個示例數據集或用文字來解釋你所做的和不想做的記錄嗎? –

+0

@OndřejŠotek是正確的! – Etienne

回答

1

你爲什麼使用X IN (Y)?只需使用X != Y。以下是您的查詢:

SELECT FocusRegion, FirstPurchasedDate 
FROM TabelName 
WHERE FocusRegion != 'Canada' 
AND (FocusRegion != 'Australia' 
    OR FirstPurchasedDate <= '2001-11-19 21:39:12.000') 
+0

,負數較少:'WHERE FocusRegion <>'Canada'OR(FocusRegion ='Australia'AND FirstPurchasedDate <='2001-11-19 21:39:12.000')' – whytheq

+0

@whytheq是的,您的版本更易於閱讀。我使用'!='更接近OP的查詢(而不是完全重寫邏輯)。 – Bohemian

1

看起來你需要使用OR代替AND,使用AND當你因爲你說應該來自澳大利亞不具有日期< = 2001-11-19,什麼是錯的你,你應該在下面使用它:

SELECT FocusRegion, FirstPurchasedDate 
FROM TabelName 
WHERE FocusRegion NOT IN ('Canada') 
AND (FocusRegion NOT IN ('Australia') OR FirstPurchasedDate <= '2001-11-19 21:39:12.000') 
0

絕對值得使用NOT算子。

你什麼都不想它是在澳大利亞和> '2001-11-19 21:39:12.000'

SELECT FocusRegion, FirstPurchasedDate 
FROM TableName 
WHERE FocusRegion <> 'Canada' 
    AND NOT (FocusRegion = 'Australia' AND FirstPurchasedDate > '2001-11-19 21:39:12.000'); 
0

我覺得這是更容易閱讀 - 更加緊密地反映你的問題的描述邏輯,你的細節:

SELECT FocusRegion, FirstPurchasedDate 
FROM TabelName 
WHERE 
     FocusRegion <> 'Canada' 
     OR 
      (
      FocusRegion = 'Australia' AND 
      FirstPurchasedDate <= '2001-11-19 21:39:12.000' 
     );