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