繁体   English   中英

SQL查询中没有重复项

[英]No duplicates in SQL query

我正在使用内部联接在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查询。

GROUP BY tblcaritem.caritemid

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

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

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

如果您只希望每列的唯一结果,则必须运行2个单独的查询。

你可以在另一行做一个聚合函数......比如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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM