2013-03-28 23 views
-3

我有一個簡單的SQL查詢:在ANSI使用多個AND和OR SQL

SELECT 
    w.fizz 
FROM 
    widgets w 
WHERE 
    w.special_id = 2394 
    AND w.buzz IS NOT NULL 
    AND w.foo = 12 

在僞代碼,這WHERE條款可以被看作是:

if(specialId == 2394 && buzz != null && foo == 12) 

我現在想更改此查詢,以便它返回special_id爲2394,其buzz不爲空,且其foo爲12,,其special_id爲2394,其等值爲'YES'且其數目爲4的所有小部件。僞代碼:

if(specialId == 2394 && (buzz != null && foo == 12) || (blah == "YES" && num == 4)) 

我嘗試以下,只得到錯誤:

SELECT 
    w.fizz 
FROM 
    widgets w 
WHERE 
    w.special_id = 2394 
    AND 
    (
     w.buzz IS NOT NULL 
     AND w.foo = 12 
    ) 
    OR 
    (
     w.blah = 'YES' 
     AND w.num = 4 
    ) 

任何想法?提前致謝!

+0

FYI報復性降薪是違反SO政策的。我的降價是合理的,因爲答案沒有閱讀我的問題,應該在我的問題下添加它們作爲評論。如果他們中的任何一個修改了他們的答案以反映被問到的問題,我會提高他們的答案。 – IAmYourFaja

+0

當然,你是對的,但我並不感到驚訝的反應,你也不應該。您提出的問題至少反映了您是SQL專家的事實。你很難成爲第一個以完全錯誤地識別實際問題爲基礎提出問題的人。所以有些人會發現你的代碼存在一個明顯的問題,並且本着有用的精神向你指出。你用downvotes迴應。相反敵對。然後,你對那些真正接受你幫助的人採取非常不敬的態度! –

+0

@DanielPratt - 在任何情況下,我的形狀或形式是否在這裏誤認了實際的問題。我是SO上最大的「幫助吸血鬼」之一(我有大約20個問題)。在問了近1000個問題之後,我不能告訴你我問了多少次問題A,只是爲了仔細閱讀/瀏覽我的問題並回答問題B.我相信這些人不會幫助我,他們正試圖通過飛行並無意識地回答問題來獲得更高的聲望。因此,我採取了懲罰那些公然無視被問到的問題的政策。 – IAmYourFaja

回答

0
SELECT 
    w.fizz 
FROM 
    widgets w 
WHERE 
    w.special_id = 2394 
    AND 
    (
     (
      w.buzz != null 
      AND w.foo = 12 
     ) 
     OR 
     (
      w.blah = 'YES' 
      AND w.num = 4 
     ) 
    ) 

圍繞「OR」增加括號,因爲「OR」的優先級低於「AND」。

+0

謝謝**閱讀**我的問題,並*回答我問的問題*! – IAmYourFaja

+0

請接受答案,如果它真的是你正在尋找的那個:) – Vesper

+1

容易的男孩,我不能再接受幾分鐘。 – IAmYourFaja