为什么这个内连接会创建重复项?
SELECT
AU.sProdCode, AU.sProdName
FROM
AllowedUsers AU
INNER JOIN
ProdMaster PM ON AU.sProdCode = PM.sProdCode
WHERE
PM.sProdStatus = 'pending' AND
AU.sUserCode = 'TM001'
如何摆脱重复的问题?
ProdMaster :
sProdCode sProdName sProdStatus
-----------------------------------
1001 MyProduct Pending
AllowedUsers :
sProdCode sProdName sUserCode
----------------------------------
1001 MyProduct TM001
我的状况
答案 0 :(得分:1)
显然,你有重复的行,大概是在第二个表中。
最有效的方法是exists
:
SELECT AU.sProdCode, AU.sProdName
FROM AllowedUsers AU
WHERE EXISTS (SELECT 1
FROM ProdMaster PM
WHERE AU.sProdCode = PM.sProdCode AND PM.sProdStatus = 'pending'
)
WHERE AU.sUserCode = 'TM001';
为获得最佳效果,您需要ProdMaster(sProdCode, sProdStatus)
和AllowedUsers(sUserCode, sProdName)
上的索引。
如果您仍然在重复,那么您在AllowedUsers
中已经重复了。在这种情况下,请使用SELECT DISTINCT
。
答案 1 :(得分:0)
只需使用下面的distinct:
SELECT distinct AU.sProdCode,AU.sProdName
FROM AllowedUsers AU
inner JOIN ProdMaster PM
ON AU.sProdCode = PM.sProdCode
where PM.sProdStatus = 'pending' and
AU.sUserCode = 'TM001'
原因是你在表格中会有一对多的关系。