【问题标题】:Combine 2 select statements result sets合并 2 个选择语句结果集
【发布时间】:2013-09-13 08:40:48
【问题描述】:

有没有办法在 sql 中组合 2 个 select 语句的结果? (就像 Union 运算符一样 - 但 Union 仅适用于相同数量和类型的列)

我想做类似的事情

SELECT * FROM JOBS j 
UNION 
SELECT COUNT(fj.Id_Filter) FROM JOBS j LEFT JOIN FILTER_JOBS fj ON j.Id=fj.Id_Job

但它不适用于 UNION

【问题讨论】:

  • 除了在您的第一个查询中添加几个空列之外,我不知道其他任何方法

标签: sql derby


【解决方案1】:

所有select 语句必须具有相同的列数,您可以通过添加带有别名的null 值列来做到这一点,例如:

SELECT cast(null as int) as cnt,col1,col2 FROM JOBS j 
UNION 
SELECT COUNT(fj.Id_Filter),null,null FROM JOBS j LEFT JOIN FILTER_JOBS fj ON j.Id=fj.Id_Job

您需要将别名放在带有强制转换/转换的第一个选择语句中。在第二条语句中,您需要包含与第一条相同的列数,null

编辑

SELECT cast(null as int) as cnt,j.* FROM JOBS j 
UNION 
SELECT COUNT(fj.Id_Filter),j.* FROM JOBS j LEFT JOIN FILTER_JOBS fj ON j.Id=fj.Id_Job

【讨论】:

  • 我明白了,但是我在表 JOBS 中有 54 列......所以这个语句会很丑陋,有 54 个空值和 54 列......
  • @fm_strategy 尝试第二种解决方案
  • 错误:语法错误:在第 1 行第 33 列遇到“*”。SQLState:42X01 错误代码:30000
  • @fm_strategy 尝试将j.* 添加到上面的第一个选择语句中
  • 由于COUNT() 是一个聚合函数,在第二种解决方案中,您是否需要为j 的每个字段设置一个分组依据?
猜你喜欢
  • 1970-01-01
  • 2021-12-22
  • 2017-08-22
  • 2020-07-21
  • 2011-02-19
  • 1970-01-01
  • 2021-08-04
  • 1970-01-01
  • 2013-11-28
相关资源
最近更新 更多