Нет дубликатов в запросе SQL - PullRequest
5 голосов
/ 09 октября 2009

Я делаю выборку в 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 ]

11 голосов
/ 09 октября 2009

GROUP BY tblcaritem.caritemid

4 голосов
/ 09 октября 2009

Проблема здесь такая же, как вы описываете: вы проверяете уникальность всего ряда, ваш набор данных в итоге выглядит так:

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
0 голосов
/ 09 октября 2009

Вы можете сделать агрегатную функцию в другой строке ... что-то вроде 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;
0 голосов
/ 09 октября 2009

Если вы поместите 2 поля в запрос SELECT DISTINCT, он вернет строки, в которых комбинация из 2 полей уникальна, а не только там, где каждое поле уникально.

Вам нужно будет выполнить 2 отдельных запроса, если вы хотите, чтобы для каждого столбца были только уникальные результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...