2009-10-09 14 views
5

Robię select w MySQL z sprzężenie wewnętrzne:Brak duplikatami w zapytaniu SQL

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; 

Czasami dostaję duplikaty tblcaritem.caritemid w wyniku. Chcę się upewnić, że nigdy nie otrzymam duplikatów tblcaritem.caritemid, ale jak mogę to zrobić? Próbowałem użyć DISTINCT, ale po prostu sprawdził, czy cały wiersz jest duplikatem, chcę sprawdzić tylko tblcaritem.caritemid, czy jest jakiś sposób?

Przepraszam, jeśli nie wyjaśniłem tego bardzo dobrze, nie jestem najlepszym z zapytań SQL.

+1

Jeśli masz inne sardynki dla tego samego caritemid, co chcesz dhow? tj. który icarid – Mark

+0

Co to jest de point przy użyciu prefiksu tbl dla tabeli? Czy musisz przeczytać przedrostek tblcar, aby zidentyfikować go jako tabelę samochodów? – Rodrigo

+0

Czy możesz przesłać strukturę swoich stołów? – Quassnoi

Odpowiedz

11

GROUP BY tblcaritem.caritemid

+1

Musiałem być naprawdę zmęczony, dlaczego tego nie zrobiłem? Działa teraz dzięki! :-) – Martin

0

Jeśli umieścisz 2 pola w zapytaniu SELECT DISTINCT, zwróci wiersze gdzie kombinacja pól 2 jest wyjątkowa, nie tylko gdzie każde pole jest wyjątkowy.

Będziesz musiał uruchomić 2 oddzielne zapytania, jeśli chcesz, aby unikalne wyniki dla każdej kolumny.

4

Problemem tutaj jest tak samo można opisać: jesteś sprawdzania niepowtarzalności całego rzędu, zbioru danych kończy się wyglądać jak ten:

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

Chcesz unikalne CarItemIds bez żadnych duplikatów, co oznacza, że Ty też chcesz wyjątkowych CarId ---- w porządku, masz 3 CarId'y, które powinieneś wybrać SQL Server?

Nie masz wielkiego wyboru tutaj wyjątkiem agregować te dodatkowe CarIds dala:

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

Można zrobić funkcję zbiorczą na drugim rzędzie ... coś jak max lub 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; 
Powiązane problemy