【问题标题】:select columns where clause or if no condition then select all columns选择列 where 子句或如果没有条件则选择所有列
【发布时间】:2017-11-23 12:12:04
【问题描述】:

我在 MySQL 中有一个table,如下所示:

我正在尝试以下查询:

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

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

我需要一个单行查询,以便它应该像我通过一样显示输出

playerId 在 WHERE IN 子句中,那么它应该显示选定的行,或者如果我

不传递任何值,那么它应该选择所有行。

【问题讨论】:

  • 你怎么称呼这个?这是原始 SQL 查询还是基于用户输入并随后传递给数据库?如果它基于用户输入并且没有传入任何内容,您可以使用“id in coalesce(input-string, id)”并传入“2,3,4,x”,它会说“如果有一个值在输入字符串中,使用它,否则匹配表中每个 id 与其自身匹配的位置。”还有一件事——“0”并不意味着“不存在”。 NULL 表示“没有价值”。在您的上表中,没有“0”,您可以轻松地替换为“and id is not null”,因为 ID 在您的 PK 中,这毫无意义。

标签: mysql where-in


【解决方案1】:

所以一个或声明?

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);

(未经测试,可能有错字)

【讨论】:

  • 这里因为 not in(0) 而选择了所有行。但是如果我通过了playerId,那么它应该选择匹配的id。如果我没有通过playerId 那么它应该选择所有行。
  • 不传递 playerId(例如没有值)不是 SQL 的选项。您将不得不转到一个存储过程,而不是使用 IF 语句进行验证)。或者查看我编辑的版本并在您没有​​数据时在您的 in 中添加一个虚拟值,然后该版本可以很好地适用于您的情况
  • 嗯,我正在寻找单行查询,如果不可能,那么我会去程序。你能帮忙吗?谢谢。
  • stackoverflow.com/questions/7566948/… 应该可以帮助您入门。它包含您正在寻找的所有逻辑(不要太多:))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 2017-01-13
  • 2018-06-26
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多