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.salesid
或a.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.salesid
或a.salesid
【讨论】:
在子查询中添加额外的字段可能会影响外部查询的结果,因为使用了DISTINCT
...
是的。我绝对同意你的看法。这就是需要了解sales
或address
表的原因【参考方案2】:
显然我编了一个不好的例子,因为我无法通过实际查询。我认为你们都是对的,它缺少列。
【讨论】:
以上是关于Db2 中的嵌套联接的主要内容,如果未能解决你的问题,请参考以下文章