2017-06-20 74 views
0

我有MySQL中的table如下:選擇列where子句或如果沒有條件,那麼選擇所有列

我嘗試以下查詢:

select * from test.score_card where playerId in(2,3); 

select * from test.score_card where playerId not in(0); 

The table: score_card

我需要一個單行查詢,以便它應顯示輸出,如果我通過

playerId在WHERE IN子句中那麼它應該顯示選定的行或者如果我不通過任何值,那麼它應該選擇所有行。

+0

你是如何調用這個?這是一個原始的SQL查詢還是基於用戶輸入並在事後傳遞給數據庫?如果它基於用戶輸入並且沒有任何內容被傳入,那麼可以使用「合併(輸入字符串,ID)」中的「id」並傳遞「2,3,4,x」,並且它會說「如果有值在輸入字符串中,使用它,否則匹配表中每個id匹配其自身的地方。「還有一件事 - 「0」並不意味着「不存在」。 NULL意味着「沒有價值」。在你上面的表中,沒有「0」,你可以簡單地用「和id不爲空」替代,這是沒有意義的,因爲ID在你的PK中。 –

回答

0

so an or STATEMENT?

select * from test.score_card 
where (playerId in(2,3)) or (playerId not in(0)); 

還是比較複雜的,如果算在第一組等於0,這將只返回第二組:

SELECT * FROM test.score_card 
WHERE playerId in (2,3) 
UNION 
SELECT * FROM test.score_card 
WHERE (
SELECT count(*) FROM test.score_card 
WHERE playerId in (2,3))=0 AND playerId not in (0); 

(未經測試,可能有一個錯字)

+0

由於'not in(0)',因此它選擇所有行。但是如果我傳遞'playerId',那麼它應該選擇匹配的'id'。如果我不傳遞'playerId',那麼它應該選擇所有行。 – Shambhu

+0

不傳遞playerId(例如沒有值)不是SQL選項。你將不得不去存儲過程,而不是有IF語句進行驗證)。或者看看我編輯過的版本,當你沒有數據的時候在你的內部添加一個虛擬值,那麼這個版本可以很好地適用於你的情況 –

+0

嗯,我正在尋找單行查詢,如果它不可能,會去做手術。你能幫忙嗎?謝謝。 – Shambhu