我正在编写一个sql请求,使用不同的关系从as400导出数据。我想这样写以减少时间并提高etl的性能(我至少有2900万行要在etl中使用它)。
sql语句:
SELECT A.x1, A.x2, A.x3, A.x4, A.x5,
(SELECT B.y1, B.y2, B.y3, C.w1 as w
FROM TEST1 AS B inner join TEST2 AS C ON ((C.w2=B.y4) and (C.w3=B.y5))
where (B.y6 = 2)),
E.q1
FROM TEST3 AS A
LEFT OUTER JOIN TEST1 AS B ON (A.x6 = B.y7)
LEFT OUTER JOIN TEST4 AS E ON ((A.x6 = E.q2) AND (A.x7 = E.q3))
这个错误我真的需要帮助
我有个例外:
滴度 : microsoft visual studio
异常de hresult:0xc020009 erreur sur traitement[源[2]] : 代码d'erreur ssis dts\u e\u oledberror。这是我最喜欢的产品。代码d'erreur : 0x80004005。取消注册是有争议的。来源 : « ibmda400命令 » hresult公司 : 0x80004005说明 : « sql0412:sous需求ê不佩服,车加科隆é原因……:拉索斯雷库ê德昂公共关系é科隆大学élorsque l'autre办事处é兰德杜公关公司é表示最简单的表达式。影响,需求ê特佩特莱尔兹é你是一个多面手吗?你是一个多面手吗?你是一个多面手吗é苏丹。公平…:名称修改é我é反悔é需要多少钱ê我要去科隆é奥特雷苏丹é兰德杜公关公司é表达你的观点。 ».
2条答案
按热度按时间isr3a4wc1#
错误的原因是子查询返回了多个列。alwayslearning已经说过了。
但下一个问题是子查询返回多行。
除非
只返回一行。注意,子查询没有与外部select相关的条件。在子查询中使用别名b不会将其与外部select关联,因为它是在内部select中重新定义的
FROM TEST1 AS B
. 这使得别名在子查询中是本地的,并且在子查询的外部select中隐藏了b的用法。如果这不是您想要的,即使它是,您应该始终遵循sql中的一个简单规则,不要重复使用alises。dly7yett2#
您可以使用“表表达式”而不是“标量子查询”来联接额外的数据。
标量子查询仅限于一行(您的子查询可能返回多行)和一列(您的子查询显然试图返回多个列)。
例如,您可以执行以下操作:
编辑以加速查询
您正在选择表中的所有行
A
; 那一定很慢。然而,由于您的连接是相等的连接,它们可以从索引中获益匪浅;以下索引可以加快查询速度: