下面是我的插入查询。
INSERT INTO /*+ APPEND*/ TEMP_CUSTPARAM(CUSTNO, RATING)
SELECT DISTINCT Q.CUSTNO, NVL(((NVL(P.RATING,0) * '10.0')/100),0) AS RATING
FROM TB_ACCOUNTS Q LEFT JOIN TB_CUSTPARAM P
ON P.TEXT_PARAM IN (SELECT DISTINCT PRDCD FROM TB_ACCOUNTS)
AND P.TABLENAME='TB_ACCOUNTS' AND P.COLUMNNAME='PRDCD';
在查询的上一版本P.TEXT_PARAM=Q.PRDCD
中,但由于TEMP_CUSTPARAM
违反了唯一约束而插入CUSTNO
期间。
插入查询需要很长时间才能完成。想知道如何在LEFT JOIN
语句中使用distinct。
感谢。
答案 0 :(得分:1)
SELECT T1.Col1, T2.Col2 FROM Table1 T1
Left JOIN
(SELECT Distinct Col1, Col2 FROM Table2
) T2 ON T2.Id = T1.Id
答案 1 :(得分:0)
您缺少将TB_ACCOUNTS记录与其相关TB_ACCOUNTS / PRDCD TB_CUSTPARAM记录相关联的条件,从而交叉加入它们。我想你想要:
INSERT INTO /*+ APPEND*/ TEMP_CUSTPARAM(CUSTNO, RATING)
SELECT DISTINCT
Q.CUSTNO,
NVL(P.RATING, 0) * 0.1 AS RATING
FROM TB_ACCOUNTS Q
LEFT JOIN TB_CUSTPARAM P ON P.TEXT_PARAM = Q.PRDCD
AND P.TABLENAME = 'TB_ACCOUNTS'
AND P.COLUMNNAME = 'PRDCD';
答案 2 :(得分:0)
如果查询需要年龄完成,请先检查执行计划。您可能会发现一些提示here - 如果您在两个非平凡的表上看到笛卡尔联接,则可能会重新查询该查询。
问问自己对查询的期望是什么。
您期望每CUSTNO
个记录一次吗?或者客户可以获得多个评级?
从客户的角度来看,每个客户的一次评估可能是有意义的。获得具有评级的唯一客户列表
1)首先获得一个独特的CUSTNO - 请注意,这不是使用DISTINCT子句,但如果每个客户使用过滤谓词更多行,例如选择最近的一行。
2)而不是加入评级表