6

我正在使用内部连接在 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

4 回答 4

13

GROUP BY tblcaritem.caritemid

于 2009-10-09T12:20:29.403 回答
4

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

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

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

除了聚合那些额外的 CarId 之外,您在这里别无选择:

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
于 2009-10-09T12:27:11.217 回答
0

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

如果您只想要每列的唯一结果,您将不得不运行 2 个单独的查询。

于 2009-10-09T12:21:20.417 回答
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;
于 2009-10-09T12:33:11.373 回答