【发布时间】:2020-05-26 08:36:31
【问题描述】:
我正在编写一个 SQL 请求,以使用不同的关系从 AS400 导出数据。 我想这样写以减少时间并提高 ETL 的性能(我的 ETL 中至少有 2900 万行可以使用它)。
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))
这个错误我真的需要帮助
我遇到了这个异常:
TITRE:Microsoft Visual Studio
HRESULT 异常:0xC0202009 Erreur sur Traitement [来源 [2]]:代码错误 SSIS DTS_E_OLEDBERROR。 Une erreur OLE DB 最重要的产品。错误代码:0x80004005。 取消注册 OLE DB est disponible。来源:« IBMDA400 命令» Hresult:0x80004005 描述:« SQL0412 : Sous-requête non admise, car plus d'une colne résultat 原因 。 . . . . : La sous-requête d'un prédicat doit avoir uniquement une colne résultat concurrent lorsque l'autre opérande du prédicat est une expression simple。 En effet, la sous-requête peut extraire zéro, une ou plusieurs valeurs constituant une liste mais apparaissant dans une seule colne résultat。阙阙。 . . : Modifiez le nombre d'éléments renvoyés par la sous-requête pour qu'il n'y ait qu'une seule colne résultat ou remplacez l'autre opérande du prédicat pour obtenir une liste d'expressions。 »。
【问题讨论】:
-
根据错误消息,您的子查询
SELECT B.y1, B.y2, B.y3, C.w1 as w ...有多个列。如果您真的想要所有这些列,您可以使子查询成为外部应用,然后将其列包含在您的主选择中。 -
问题仍然存在。
-
我很困惑。 SQL Server 是否在“ibm-midrange”计算机上运行?我认为你的标签是错误的。
-
是的,已检查。我找到了一个解决方案,但它不是最好的:(SELECT B.y1, FROM TEST1 AS B inner join TEST2 AS C ON ((C.w2=B.y4) and (C.w3=B.y5)) where ( B.y6 = 2)), (SELECT B.y2 FROM TEST1 AS B 内连接 TEST2 AS C ON ((C.w2=B.y4) and (C.w3=B.y5)) 其中 (B.y6 = 2)), (SELECT B.y3 FROM TEST1 AS B 内连接 TEST2 AS C ON ((C.w2=B.y4) and (C.w3=B.y5)) where (B.y6 = 2)), (SELECT C.w1 as w FROM TEST1 AS B 内连接 TEST2 AS C ON ((C.w2=B.y4) and (C.w3=B.y5)) where (B.y6 = 2)),跨度>
-
您的子查询(如果有效)与任何外部表都不相关。这似乎是一个更大的问题。并且了解您需要使用 DB2 可以理解的语法,而不是 TSQL 语法。在我看来,您需要将子查询设为派生表并将其加入主查询。我建议您使用 DB2 工具开发您的查询以使查询正确。然后在您的 SSIS 逻辑中使用该查询。
标签: sql sql-server ssis ibm-midrange business-intelligence