使用SQL从AS400提取数据的问题

问题描述 投票:-1回答:2

我正在编写一个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 StudioHRESULT异常:0xC0202009Erreur sur Traitement [来源[2]]:d'erreur SSIS代码DTS_E_OLEDBERROR。 OLE DB的产品。代码d'erreur:0x80004005取消注册OLE DB est负责。来源:«IBMDA400命令»结果:0x80004005描述:«SQL0412:非固定的汽车,汽车加上d'une Colonnerésultat原因。 。 。 。 。 :独特的表达方式和独特的表达方式都非常重要。效果好,效果好,价格低廉,构成专家名单和财产授予。 fair下。 。 。 :修订《反倾销法》,以表达方式来表达自己的观点。 »。

sql sql-server ssis ibm-midrange business-intelligence
2个回答
0
投票

您可以使用“表表达式”代替“标量子查询”来连接额外的数据。

标量子查询仅限于一行(您可能返回多行)和一列(您显然试图返回不止一列)。

例如,您可以做:

SELECT  A.x1, A.x2, A.x3, A.x4, A.x5,
        f.y1, f.y2, f.y3, f.w,
        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))
left join (
  SELECT B.y1, B.y2, B.y3, C.w1 as w 
  FROM TEST1 AS B -- you should avoid reusing the same alias B, but OK
  inner join TEST2 AS C ON ((C.w2=B.y4) and (C.w3=B.y5)) 
  where (B.y6 = 2)
) f on 1 = 1 -- what's the join condition? I assume you want all rows to match

编辑以加快查询速度

您正在从表A中选择所有行;那一定很慢。但是,由于您的联接是等联接,因此它们可以从索引中大大受益。以下索引可以使您的查询更快:

create index ix1 on TEST1 (y7, x1, x2, x3, x4, x5);

create index ix2 on TEST1 (y6, y1, y2, y3);

create index ix3 on TEST4 (q2, q3, q1);

create index ix4 on TEST2 (w2, w3, w1);

0
投票

错误的原因是子查询返回的列不止一列。 AlwaysLearning已经说过了。

但是下一个问题将是您的子查询返回多行。

除非

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)

仅返回单行。注意,子查询没有与外部选择相关的条件。在子查询中使用别名B不会将其与外部选择相关联,因为它在FROM TEST1 AS B的内部选择中已重新定义。这使得别名在子查询中是本地的,并在子查询的外部选择中隐藏了B的使用。如果这不是您想要的,即使它不是您想要的,也应始终遵循SQL中的简单规则,请勿重复使用别名。

© www.soinside.com 2019 - 2024. All rights reserved.