2010-06-30 108 views
2

我已經得到了下一個SQL查詢:幫助與SQL查詢

SELECT FIRST_NAME, LAST_NAME 
FROM MYTABLE 
WHERE STATUS = 1 AND VARIABLE IN ('PR', 'AR') AND SPECIAL = 1; 

特別的是,如果我以前在我的表單中選擇「PR」(複選框),它增加了一個aditional的條件。事情是,用這個查詢,我不再獲得VARIABLE爲'AR'的行。現在

,這個想法是,這個查詢應該返回時變量是「公關」或「AR」任何行,但如果是「公關」,從這個「PR'單獨組,它應該只返回SPECIAL ones。我的意思是,它應該仍然顯示VARIABLE ='AR'的行,但是如果SPECIAL = 1,那麼'PR'的那些應該只是那些SPECIAL = 1的行。

我知道這個想法應該是非常很簡單,但當他們給我這份任務時,我完全驚慌失措,因爲我一直在努力。

+0

'如果SPECIAL = 1,那麼......只有那些SPECIAL = 1。'我想我知道你的意思,但你的方式寫它是混亂。 – 2010-06-30 23:26:17

+0

我知道,對不起。我的母語不是英語,加上我完全嚇壞了。 – 2010-07-01 01:15:00

回答

3

由於這是一項任務,我認爲最好解釋如何做,而不是僅僅爲了給你複製和粘貼代碼。

要選擇一排,其中STATUS = 1 之一:

  • 變量是 'AR'

  • 變量「 PR' SPECIAL = 1。

使用ANDOR的組合。請記住ANDOR的優先級高。使用圓括號明確表達如何計算是一個好主意。

+0

非常感謝。我開始更頻繁地出現這些空頭震盪。再次,謝謝。 – 2010-07-01 15:35:09

3
SELECT FIRST_NAME, LAST_NAME FROM MYTABLE WHERE 
    STATUS = 1 AND (
    VARIABLE = 'AR' OR (SPECIAL = 1 AND VARIABLE = 'PR') 
); 

SQL對邏輯運算符的支持非常強大,您不僅限於AND。

0

你需要和OR語句,試試這個:

SELECT FIRST_NAME, LAST_NAME FROM MYTABLE WHERE STATUS = 1 AND (VARIABLE = 'PR' AND SPECIAL = 1 OR VARIABLE += 'AR'); 
2

如果我理解正確的,你想要麼( 「AR」)或( 「PR」 和特殊= 「1」),然後再嘗試這樣的:

SELECT FIRST_NAME, LAST_NAME FROM MYTABLE 
WHERE STATUS = 1 AND (VARIABLE = 'AR' OR (VARIABLE = 'PR' AND SPECIAL = 1)); 
0

我認爲,所有你需要做的就是這個工作,你的願望是把不同的標準分解成由括號包圍單獨的邏輯分組的方式。如果我正確理解你的問題,你想要這樣的事情:

SELECT FIRST_NAME, LAST_NAME FROM MYTABLE WHERE (STATUS = 1) AND ((VARIABLE = 'PR' AND SPECIAL = 1) OR (VARIABLE ='AR')) ; 
+0

在狀態= 1時不需要parens(但它仍然有效),並且它包含在他的原始SQL中 - 您的意思是什麼? – jamauss 2010-06-30 23:23:48

+0

咦?你抱怨你自己的答案嗎? – 2010-07-01 14:44:48

+0

哦,奇怪 - 有人評論我的回答,然後他們刪除了他們的評論,我想。 – jamauss 2010-07-01 17:09:51