[英]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.