Mysql 将多个查询合并为一个查询

Mysql 将多个查询合并为一个查询,mysql,sql,Mysql,Sql,是否可以在一个查询中连接多个查询 我有两个: SELECT DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff FROM Table WHERE Color = 'Red' 及 现在,我希望在一个查询中同时使用这两种方法 因此,请尝试这样做: SELECT ( SELECT DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff FROM Table WHERE Color = 'Red' ) ( SELECT DAT

是否可以在一个查询中连接多个查询

我有两个:

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

现在,我希望在一个查询中同时使用这两种方法

因此,请尝试这样做:

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'
)
select max(diff_red) as diff_red, max(diff_blue) as diff_blue
from ((select (@rnr := @rnr + 1) as rn, 
              DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff_red,
              NULL AS Diff_blue
       from t cross join
            (select @rnr := 0) params
       where color = 'Red'
      ) union all
      (select (@rnb := @rnb + 1) as rn, 
              NULL AS Diff_red,
              DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff_blue
       from t cross join
            (select @rnrb:= 0) params
       where color = 'Blue'
      )
     ) rb
group by rn;

但是不起作用:(

您可以使用UNION操作符连接两个查询。

您可以使用UNION运算符连接两个查询。
在这种情况下,它不只是更新
的位置吗

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

是的,您可以使用内部联接或并集,但对于本例来说,这并不有用。

在这种情况下,它不只是更新
where

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

是的,您可以使用内部联接或并集,但在本例中,这将不起作用。

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

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

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

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

如果所有查询中的输出列都相同,则可以使用
UNION/UNION all
,如下所示:

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

UNION

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

如果所有查询中的输出列都相同,则可以使用
UNION/UNION all
,如下所示:

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

UNION

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

如果可以使用不同行中的值,则只需执行以下操作:

SELECT Color, DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff
FROM Table
WHERE Color IN ('Red', 'Blue');
我将
Color
添加到
SELECT
中,以便您可以区分行

如果子查询返回一个值,则只是缺少一个逗号:

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'
       );
如果子查询返回多行,则需要解释所需的结果集

编辑:

如果希望值排列在两个不同的列中,则可以执行以下操作:

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'
)
select max(diff_red) as diff_red, max(diff_blue) as diff_blue
from ((select (@rnr := @rnr + 1) as rn, 
              DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff_red,
              NULL AS Diff_blue
       from t cross join
            (select @rnr := 0) params
       where color = 'Red'
      ) union all
      (select (@rnb := @rnb + 1) as rn, 
              NULL AS Diff_red,
              DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff_blue
       from t cross join
            (select @rnrb:= 0) params
       where color = 'Blue'
      )
     ) rb
group by rn;

如果可以使用不同行中的值,则只需执行以下操作:

SELECT Color, DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff
FROM Table
WHERE Color IN ('Red', 'Blue');
我将
Color
添加到
SELECT
中,以便您可以区分行

如果子查询返回一个值,则只是缺少一个逗号:

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'
       );
如果子查询返回多行,则需要解释所需的结果集

编辑:

如果希望值排列在两个不同的列中,则可以执行以下操作:

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'
)
select max(diff_red) as diff_red, max(diff_blue) as diff_blue
from ((select (@rnr := @rnr + 1) as rn, 
              DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff_red,
              NULL AS Diff_blue
       from t cross join
            (select @rnr := 0) params
       where color = 'Red'
      ) union all
      (select (@rnb := @rnb + 1) as rn, 
              NULL AS Diff_red,
              DATEDIFF(CURRENT_DATE, cl.updated_at) AS Diff_blue
       from t cross join
            (select @rnrb:= 0) params
       where color = 'Blue'
      )
     ) rb
group by rn;


您没有描述预期的输出。我还以为您之前接受的答案(经过一些小的修改)可能是两个不同的列您没有描述预期的输出。我还以为您之前接受的答案(经过一些小的修改)可能是两个不同的列在
SELECT
中的列中添加
Color
,sIt也会很有用,这样我们就可以知道哪个差异与哪个颜色有关。感谢您的打字错误更正。当然,我肯定在OP的查询中看不到它,但通常这是明智的,这取决于您以后想在哪里使用它。我应该说,我把这个问题过于简单化了这里,在我的情况下,它相当复杂,我还需要两个不同的列作为输出更新我的答案。如果这不是你需要的,那么你的问题是不清楚的。对不起,我试图更具体。我需要一种方法来轻松地把我的2个查询放在一起,因为它们都非常长和复杂,我已经简化了我的示例。案例什么时候可能有效,但我会d需要一周的时间来重新编码…在
SELECT
中的列中添加
Color
也会很有用,这样我们就知道哪些差异与哪种颜色有关。谢谢你的拼写更正。当然,当然,我只是在OP的查询中没有看到它,但通常这是明智的,这取决于你以后想在哪里使用它。我应该说,那是我把这个问题简化了,在我的例子中,它非常复杂,我还需要两个不同的列作为输出更新我的答案。如果这不是你需要的,那么你的问题就不清楚了。很抱歉,我试图更具体一些。我需要一种方法来轻松地将我的两个查询放在一起,因为它们都非常长且复杂,我已经简化了我的示例。case什么时候可能有用,但我需要一周的时间来重新编码…我需要两个不同的列为什么需要两个不同的列?你可以包含一个颜色列。因为它用于两个不同的统计数据,我的示例简化了;)然后添加示例数据,预期结果,因为不清楚。我需要两个不同的列为什么需要两个不同的列?您可以包含颜色列。因为它用于两种不同的统计信息,我的示例简化了;)然后添加示例数据,预期结果,因为它不清楚。这将返回0行。颜色不能同时是蓝色和红色:-)没错!我应该使用OR语句,谢谢。我将更新我的答案。这将返回0行。颜色不能同时是蓝色和红色:-)没错!我应该使用OR语句,谢谢,我会更新我的答案。我只是认为这可以解决它,但我仍然得到错误1242(子查询返回超过1行),这可能是因为我在每个表中加入了多个表吗?(各相同)@Intercept0r。根据要求,您应提供样本数据和预期结果。我们无法了解您对数据外观的看法。我用您可能需要的内容编辑了答案。我只是认为这可以修复它,但我仍然得到错误1242(子查询返回的行数超过1行),这可能是因为我将多个表合并到了