ms access sql with union all and inner join

ms access sql with union all and inner join

我正在尝试使用 union all 编写一个 sql 和一个具有内部连接 ​​[Code] 的字段。

 SELECT TypeID, 
       (SELECT CodeID 
          FROM tblID
          INNER JOIN tblA ON tblID.TypeID = tblA.TypeID) as Code,        
    APrice as 1,         
    Null as 2 
 FROM tblA 
 UNION ALL 
 SELECT TypeID, 
       (SELECT CodeID 
          FROM tblID
          INNER JOIN tblM ON tblID.TypeID = tblM.TypeID) as Code,
    Null as 1,
    MPrice as 2          
 FROM tblM;

您的子查询返回多行。据推测,您打算使用相关子查询。看起来像:

SELECT TypeID, 
       (SELECT CodeID FROM tblID WHERE tblID.TypeID = tblA.TypeID) as Code,        
       APrice as aprice,         
       Null as mprice
FROM tblA 
UNION ALL 
SELECT TypeID, 
       (SELECT CodeID FROM tblID WHERE tblID.TypeID = tblM.TypeID) as Code,
       Null as aprice,
       MPrice as mprice          
FROM tblM;

备注:

  • 如果您 运行 单独进行子查询,您会看到此错误。您应该学习如何调试查询。
  • 我认为数字不是有效的列别名。在任何情况下,它们都是一个糟糕的选择,因此请为列提供真实名称。
  • 这个逻辑通常会用 inner joinleft join 来处理。

我只是在这里猜测您的内部子查询返回了不止一条记录,并且所有记录都出现了问题。但这不可能说,因为您没有共享样本数据或您的错误消息。

考虑使用 LEFT OUTER JOIN(如下)在没有子查询的情况下重写它,或者切换到适当的相关子查询。

SELECT TypeID
    ,tblID.CodeID
    ,APrice AS 1
    ,NULL AS 2
FROM tblA 
    LEFT OUTER JOIN tblID 
        ON tblID.TypeID = tblA.TypeID

UNION ALL

SELECT TypeID
    ,tblID.CodeID
    ,NULL AS 1
    ,MPrice AS 2
FROM tblM
    LEFT OUTER JOIN tblID 
        ON tblID.TypeID = tblM.TypeID