2017-06-20 151 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