mysql - 将多个查询合并为一个

标签 mysql sql

是否可以将多个查询合并为一个?

我有 2 个:

SELECT DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff
FROM Table
WHERE Color = 'Red'

SELECT DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff
FROM Table
WHERE Color = 'Blue'

现在我想在一个查询中同时进行

也可以这样尝试:

SELECT
(
SELECT DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff
FROM Table
WHERE Color = 'Red'
)
(
SELECT DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff2
FROM Table
WHERE Color = 'Blue'
)

但确实有效 :(

最佳答案

您可以使用带有 IN 运算符的单个查询。这是多个 OR 条件的缩写:

SELECT DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff
FROM Table
WHERE Color IN ( 'Red', 'Blue' )

如果你真的坚持(气馁)有两个查询,然后使用 UNION ALL 来组合它们:

SELECT DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff
FROM Table
WHERE Color = 'Red'
UNION ALL -- does not remove duplicates from output
SELECT DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff
FROM Table
WHERE Color = 'Blue'

如果要删除重复项,请使用 UNION 而不是 UNION ALL


如果您需要在评论中提到的不同列中产生结果,则为此使用 CASE 语句。不过,我真的没有看到这样做的原因。

SELECT 
  CASE WHEN Color = 'Red' THEN DATEDIFF(CURRENT_DATE, cl.updated_at) END AS Diff,
  CASE WHEN Color = 'Blue' THEN DATEDIFF(CURRENT_DATE, cl.updated_at) END AS Diff2,
FROM Table
WHERE Color IN ( 'Red', 'Blue' )

对于第二种方法:

SELECT
  CASE WHEN Color = 'Red'  THEN Diff END AS Diff,
  CASE WHEN Color = 'Blue' THEN Diff END AS Diff2
FROM (
  SELECT Color, DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff
  FROM Table
  WHERE Color = 'Red'
  UNION ALL -- does not remove duplicates from output
  SELECT Color, DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff
  FROM Table
  WHERE Color = 'Blue'
) t

关于mysql - 将多个查询合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50896389/

相关文章:

php - 如何删除前导零?

mysql - 找出表中没有的值

php - 存储过程 zend framework 2.2 tablegateway 中的多重选择问题

MySQL在一列困惑的文本中选择引号 ""中的单词

mysql - 查询不适用于 md5(id),其中

php - 通过将 MySQL 与 PHP 分开来保护 MySQL

Mysql外键错误150

sql - 使用Intellisense开发MySQL存储过程?

sql - 使用单个表,如何折叠具有互斥列数据的多行

mysql - mysql 中的多个 DELETE 不适用于别名