Db2 中的嵌套联接

Posted

技术标签:

【中文标题】Db2 中的嵌套联接【英文标题】:nested join in Db2 【发布时间】:2019-02-07 23:11:20 【问题描述】:

伙计们,这个查询有什么问题,我在 DB2 LUW 中收到错误说明。

[42703][-206] "d.sales" 在使用它的上下文中无效.. SQLCODE=-206, SQLSTATE=42703, DRIVER=4.23.42 [56098][-727] 错误在隐式系统操作类型“2”期间发生。针对错误返回的信息包括 SQLCODE“-206”、SQLSTATE“42703”和消息标记“d.sales”.. SQLCODE=-727、SQLSTATE=56098、DRIVER=4.23.42

SELECT listagg(e.name,';'), e.address,d.sales
FROM emp e
JOIN (
    SELECT distinct sales, org
    FROM sales s
    JOIN address a ON S.ID = a.id
) d ON d.salesid = e.salesid 

【问题讨论】:

d 不包含名为 salesid 的列,因此这不起作用:ON d.salesid = e.salesid 您需要向我们展示示例数据和预期输出,以便我们尝试帮助查询。事实上,我们只是在猜测。 很明显s.salesida.salesid在子查询中被遗忘了 @AlexYu : 向子查询添加额外的字段可能会影响外部查询的结果,因为使用了DISTINCT... 【参考方案1】:

查看您的查询:

SELECT listagg(e.name,';'), e.address,d.sales
FROM emp e
JOIN (SELECT distinct sales, org  -- you need to add salesid to your columns set
         FROM sales s
         JOIN address a ON S.ID = a.id
) d ON d.salesid = e.salesid 

您忘记在子查询 d 中选择 salesid

您需要添加s.salesida.salesid

【讨论】:

在子查询中添加额外的字段可能会影响外部查询的结果,因为使用了DISTINCT... 是的。我绝对同意你的看法。这就是需要了解salesaddress 表的原因【参考方案2】:

显然我编了一个不好的例子,因为我无法通过实际查询。我认为你们都是对的,它缺少列。

【讨论】:

以上是关于Db2 中的嵌套联接的主要内容,如果未能解决你的问题,请参考以下文章

使用内部联接删除 DB2

MS Access 2013 中的嵌套 SQL 联接

如何将此 Informix 嵌套联接转换为 tsql 嵌套联接?

联接 (SQL Server)

哈希联接与嵌套循环

如何使用本机查询在 JPA 中执行嵌套联接