2009-10-09 17 views
5

que estoy haciendo un selecto en MySQL con una unión interna:No hay duplicados en la consulta 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; 

veces me siento duplicados de tblcaritem.caritemid en el resultado. Quiero asegurarme de nunca obtener duplicados de tblcaritem.caritemid, pero ¿cómo puedo hacer eso? Traté de usar DISTINCT pero solo comprobé si toda la fila es un duplicado, solo quiero verificar tblcaritem.caritemid, ¿hay alguna manera?

Disculpa si no lo explicaba muy bien, no soy la mejor de las consultas SQL.

+1

Si tiene diferentes icardids para el mismo caritemid, ¿qué quiere dhow? es decir, qué icarid – Mark

+0

¿Qué significa el punto usando el prefijo tbl para una tabla? ¿Necesitabas leer el prefijo de tblcar para identificarlo como una tabla de autos? – Rodrigo

+0

¿Podría publicar la estructura de sus tablas? – Quassnoi

Respuesta

11

GROUP BY tblcaritem.caritemid

+1

Debo haber estado muy cansado, ¿por qué no hice esto? Está trabajando ahora gracias! :-) – Martin

0

Si pones 2 campos de una consulta SELECT DISTINCT, volverá filas en las que la combinación de los 2 campos es única, no sólo donde cada campo es único.

Tendrá que ejecutar 2 consultas por separado si solo desea resultados únicos para cada columna.

4

El problema aquí es igual que usted describe: usted está comprobando para la unicidad de toda la fila, el conjunto de datos termina pareciéndose a esto:

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

Usted quiere CarItemIds únicas sin duplicados, lo que significa que usted también quiere CarIds únicos ---- bien, usted tiene 3 CarIds, ¿cuál debería elegir SQL Server?

Usted no tiene mucha elección aquí excepto para acumular dichas CarIds adicionales distancia:

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

que podría hacer una función de agregado en la otra fila ... algo así como max o 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; 
Cuestiones relacionadas