SQL Join返回重复的结果

时间:2013-11-06 16:20:00

标签: sql join left-join

我正在尝试返回分配给每个客户的所有客户提示的连锁列表,每个客户密钥(CUS_PK)只返回一行。以下查询为我提供了我正在寻找的信息,但是当向一个客户分配了多个提示时,我得到了重复的行,每行都相同,只是提示键以所有可能的组合返回,每个组合一行。我知道这是因为我正在使用连接,但我不太了解SQL以提出另一种方法来实现这一点。

这是我正在使用的查询:

select CUS1.CUS_PK,
CLP1.CLP_PRM_FK || CASE WHEN CLP2.CLP_PRM_FK <> '' THEN ', ' ELSE '' END ||
CLP2.CLP_PRM_FK || CASE WHEN CLP3.CLP_PRM_FK <> '' THEN ', ' ELSE '' END ||
CLP3.CLP_PRM_FK || CASE WHEN CLP4.CLP_PRM_FK <> '' THEN ', ' ELSE '' END ||
CLP4.CLP_PRM_FK AS 'AP'

FROM ecrs.Customers CUS1

LEFT OUTER JOIN ecrs.CustomerLinkPOSPrompts CLP1 ON (CLP1.CLP_CUS_FK = CUS1.CUS_PK)
LEFT OUTER JOIN ecrs.CustomerLinkPOSPrompts CLP2 ON (CLP2.CLP_CUS_FK = CUS1.CUS_PK AND CLP2.CLP_PRM_FK<>CLP1.CLP_PRM_FK)
LEFT OUTER JOIN ecrs.CustomerLinkPOSPrompts CLP3 ON (CLP3.CLP_CUS_FK = CUS1.CUS_PK AND CLP3.CLP_PRM_FK<>CLP2.CLP_PRM_FK AND CLP3.CLP_PRM_FK<>CLP1.CLP_PRM_FK)
LEFT OUTER JOIN ecrs.CustomerLinkPOSPrompts CLP4 ON (CLP4.CLP_CUS_FK = CUS1.CUS_PK AND CLP4.CLP_PRM_FK<>CLP3.CLP_PRM_FK AND CLP4.CLP_PRM_FK<>CLP2.CLP_PRM_FK AND CLP4.CLP_PRM_FK<>CLP1.CLP_PRM_FK)

ORDER BY CUS1.CUS_PK

GROUP BY似乎没有任何效果。

重复的行看起来像这样,从0-3提示结果:

CUS_PK  AP
-----   -----
35331   
35274   40
35342   37, 65
35342   65, 37  
35344   37, 53, 65
35344   53, 65, 37
35344   37, 65, 53
35344   53, 37, 65
35344   65, 53, 37
35344   65, 37, 53

另外,我如何指定提示的返回顺序?

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试按特定顺序加入它们(例如,使用'&lt; ='而不是'&lt;&gt;'):

LEFT OUTER JOIN ecrs.CustomerLinkPOSPrompts CLP1 ON (CLP1.CLP_CUS_FK = CUS1.CUS_PK)
LEFT OUTER JOIN ecrs.CustomerLinkPOSPrompts CLP2 ON (CLP2.CLP_CUS_FK = CUS1.CUS_PK AND CLP2.CLP_PRM_FK <= CLP1.CLP_PRM_FK)
LEFT OUTER JOIN ecrs.CustomerLinkPOSPrompts CLP3 ON (CLP3.CLP_CUS_FK = CUS1.CUS_PK AND CLP3.CLP_PRM_FK <= CLP2.CLP_PRM_FK AND CLP3.CLP_PRM_FK <= CLP1.CLP_PRM_FK)
LEFT OUTER JOIN ecrs.CustomerLinkPOSPrompts CLP4 ON (CLP4.CLP_CUS_FK = CUS1.CUS_PK AND CLP4.CLP_PRM_FK <= CLP3.CLP_PRM_FK AND CLP4.CLP_PRM_FK <= CLP2.CLP_PRM_FK AND CLP4.CLP_PRM_FK <= CLP1.CLP_PRM_FK)