SQL查询中没有重复项

时间:2009-10-09 12:17:10

标签: sql mysql duplicates distinct

我正在使用内部联接在MySQL中进行选择:

SELECT DISTINCT tblcaritem.caritemid, tblcar.icarid 
FROM tblcaritem 
INNER JOIN tblprivatecar ON tblcaritem.partid = tblprivatecar.partid 
INNER JOIN tblcar ON tblcaritem.carid = tblcar.carid 
WHERE tblcaritem.userid=72;

有时我会在结果中得到tblcaritem.caritemid的副本。我想确保永远不会得到tblcaritem.caritemid的副本,但我怎么能这样做?我试图使用DISTINCT,但它只是检查整行是否重复,我想检查只有tblcaritem.caritemid,有没有办法?

很抱歉,如果我没有很好地解释它,我不是最好的SQL查询。

4 个答案:

答案 0 :(得分:11)

GROUP BY tblcaritem.caritemid

答案 1 :(得分:4)

这里的问题正如您所描述的那样:您正在检查整行的唯一性,您的数据集最终看起来像这样:

CarItemId    CarId
---------    -----
1            1
1            2
1            3
2            1
2            2
3            3

你想要没有重复的唯一CarItemIds,这意味着你也想要唯一的CarIds ----好吧,你有3个CarIds,哪个应该是SQL Server选择的?

除了聚集那些额外的CarIds之外,你在这里没有多少选择:

SELECT tblcaritem.caritemid, max(tblcar.icarid)
FROM tblcaritem
INNER JOIN tblprivatecar ON tblcaritem.partid = tblprivatecar.partid
INNER JOIN tblcar ON tblcaritem.carid = tblcar.carid
WHERE tblcaritem.userid=72
GROUP BY tblcaritem.caritemid

答案 2 :(得分:0)

如果在SELECT DISTINCT查询中放入2个字段,它将返回两个字段的组合唯一的行,而不仅仅是每个字段唯一的位置。

如果您只想为每列提供唯一的结果,则必须运行2个单独的查询。

答案 3 :(得分:0)

你可以在另一行做一个聚合函数......比如max或min

SELECT tblcaritem.caritemid, max(tblcar.icarid) 
FROM tblcaritem 
INNER JOIN tblprivatecar ON tblcaritem.partid = tblprivatecar.partid 
INNER JOIN tblcar ON tblcaritem.carid = tblcar.carid 
WHERE tblcaritem.userid=72
group by tblcaritem.caritemid;