【问题标题】:Print more than 2 tables in SQL在 SQL 中打印超过 2 个表
【发布时间】:2021-12-24 08:08:21
【问题描述】:

我想在 SQL azure 中打印出 2 个或更多表,但我正在尝试使用 UNION 和 UNION ALL 但它仍然有相同的错误

消息 205,级别 16,状态 1,过程查询 12,第 7 行 使用 UNION、INTERSECT 或 EXCEPT 运算符组合的所有查询在其目标列表中必须具有相同数量的表达式

GO 
CREATE PROCEDURE Query12
@date_job_completed varchar(50),
@Department_number int
AS

BEGIN
With q as(
    SELECT Job.Job_no, type_of_machine_use, amount_of_time_machine_use, martirial_used, labor_time, date_job_completed as Print_out
    FROM Cut_job
    INNER JOIN Job ON Job.Job_no = Cut_job.Job_no
    INNER JOIN No_of_Process ON No_of_Process.Process_id = Job.Process_id
    INNER JOIN Department ON Department.Department_number = No_of_Process.Department_number
    WHERE Cut_job.date_job_completed = @date_job_completed AND Department.Department_number = @Department_number
    
    UNION ALL

    SELECT Job.Job_no, Color, Volume, labor_time, date_job_completed as Print_out
    FROM Paint_job
    INNER JOIN Job ON Job.Job_no = Paint_job.Job_no
    INNER JOIN No_of_Process ON No_of_Process.Process_id = Job.Process_id
    INNER JOIN Department ON Department.Department_number = No_of_Process.Department_number
    WHERE Paint_job.date_job_completed = @date_job_completed AND Department.Department_number = @Department_number
    
    UNION ALL

    SELECT Job.Job_no, labor_time, date_job_completed as Print_out
    FROM Fit_job
    INNER JOIN Job ON Job.Job_no = Fit_job.Job_no
    INNER JOIN No_of_Process ON No_of_Process.Process_id = Job.Process_id
    INNER JOIN Department ON Department.Department_number = No_of_Process.Department_number
    WHERE Fit_job.date_job_completed = @date_job_completed AND Department.Department_number = @Department_number
) 
SELECT Print_out
FROM q
END
GO
EXEC Query12 @date_job_completed = '23/23/2019', @Department_number = 4;

【问题讨论】:

  • 你不明白错误信息到底是什么?为了进一步澄清还提供minimal reproducible example,即涉及的表或其他对象的CREATE 语句(粘贴文本,不要使用图像,不要链接到外部站点), INSERT 用于示例数据 (dito) 的语句以及带有表格文本格式的示例数据的所需结果。通过edit提出问题来做到这一点。不要使用 cmets 获取如此重要的信息。
  • 将 NULL 添加到较短的列列表中,直到获得相同的数字。
  • 或者,您知道,在每个查询中包含相同的列...
  • 对不起,我应该问清楚。一切都在 SQL 中打印得很好,但是当我将它连接到 Java 以打印出所有 3 个表时,Java 打印出 3 个表,但它只读取第一个表的 1 个值
  • 请更新您的问题,而不是在 cmets 上回答。

标签: sql azure unions


【解决方案1】:

使用 UNION、UINON ALL、EXCEPT 或 INTERSECT 组合两个或多个查询的结果集的基本规则是:

  • 查询中列的数量和顺序必须相同
  • 并且数据类型应该兼容。

如果不这样做,您将遇到如下错误。

如果您在所有查询中没有相同的列列表以避免错误,您可以将 NULL 列添加到缺少的列列表中,如下所示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-01
    • 2015-11-16
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    相关资源
    最近更新 更多