Sql server 如何将字段从Items表添加到Union all表ItemOtherCode

Sql server 如何将字段从Items表添加到Union all表ItemOtherCode,sql-server,tsql,Sql Server,Tsql,查询应该从items表中收集原始项,从ItemOtherCode表中收集替代项: 但当我将所有项表和ItemOtherCode表合并时,我得到一个错误: 使用UNION、INTERSECT或EXCEPT运算符组合的所有查询必须具有 目标列表中的表达式数相等 如何解决这个问题 DDL 项目表 ItemOtherCode表 它们之间的关系: SELECT * FROM dbo.Items i INNER JOIN dbo.ItemOtherCode o ON o.ItemCode = i.Item

查询应该从items表中收集原始项,从ItemOtherCode表中收集替代项:

但当我将所有项表和ItemOtherCode表合并时,我得到一个错误:

使用UNION、INTERSECT或EXCEPT运算符组合的所有查询必须具有 目标列表中的表达式数相等

如何解决这个问题

DDL 项目表

ItemOtherCode表

它们之间的关系:

SELECT *
FROM dbo.Items i 
INNER JOIN dbo.ItemOtherCode o ON o.ItemCode = i.ItemCode

在两个查询中,UNION需要相同的字段计数和相同的列名称:

SELECT FIELD1, FIELD2, FIELD3 FIELD4
FROM   TABLE1
UNION ALL
SELECT OTHER_FIELD1 AS FIELD1, OTHER_FIELD2 AS FIELD2, '' AS FIELD3, 0 AS FIELD4
FROM   TABLE2
我猜想[OtherCode]也应该引用父项表

您所尝试的:

SELECT OtherCode,BarcodeUnitPrice 
FROM ItemOtherCode 
WHERE ItemCode= 10003
或与join相同,如FK解释问题中所示:

SELECT *
FROM dbo.Items i 
INNER JOIN dbo.ItemOtherCode o ON o.ItemCode = i.ItemCode
WHERE i.ItemCode = 10003
现在您已经找到了10003的所有替代项。但是你需要这些物品的信息。有关项目的信息存储在哪里?当然在项目表中。因此,我们需要再次使用不同的ItemCode值:


不知道BarcodeUnitPrice应该是什么意思,因此无法说明如何处理它。

是否需要一行包含所有值?我不明白为什么要进行联合而不是联接。你想要的结果集是什么样子的?我不确定这里的问题是什么。你们想完成什么?很抱歉,我需要进行联合,但问题是如何从items表中获取字段。内部连接用于解释only@techdata如果这是一个写得不好的问题,你已经有了答案
SELECT FIELD1, FIELD2, FIELD3 FIELD4
FROM   TABLE1
UNION ALL
SELECT OTHER_FIELD1 AS FIELD1, OTHER_FIELD2 AS FIELD2, '' AS FIELD3, 0 AS FIELD4
FROM   TABLE2
SELECT OtherCode,BarcodeUnitPrice 
FROM ItemOtherCode 
WHERE ItemCode= 10003
SELECT *
FROM dbo.Items i 
INNER JOIN dbo.ItemOtherCode o ON o.ItemCode = i.ItemCode
WHERE i.ItemCode = 10003
SELECT io.*
FROM dbo.Items i 
INNER JOIN dbo.ItemOtherCode o ON o.ItemCode = i.ItemCode
INNER JOIN dbo.Items io on io.ItemCode = o.OtherCode --<<<
WHERE i.ItemCode = 10003
SELECT ItemCode,SelPrice1Default, ItemAraName, ItemLatName, 
       ItemNotes, UnitCode, ItemClassCode, ItemGroupCode, 
       ItemSubGroupCode, TaxSet, ExpireDate, ItemType, ItemEquation, 
       ItemDim, NotActive, UnitCode1
  FROM dbo.Items i
 WHERE i.ItemCode = 10003

 UNION ALL

SELECT ItemCode,SelPrice1Default, ItemAraName, ItemLatName, 
       ItemNotes, UnitCode, ItemClassCode, ItemGroupCode, 
       ItemSubGroupCode, TaxSet, ExpireDate, ItemType, ItemEquation, 
       ItemDim, NotActive, UnitCode1
  FROM dbo.ItemOtherCode o
 INNER JOIN dbo.Items io on io.ItemCode = o.OtherCode
 WHERE o.ItemCode = 10003