2011-08-30 24 views
29

Estoy tratando de seleccionar las filas duplicadas en la tabla mysql, está funcionando bien para mí, pero el problema es que no me permite seleccionar todos los campos de esa consulta, simplemente dejándome seleccionar el nombre del campo que utilicé como algo distinto, déjame escribir la consulta para una mejor understadingMysql select distinct

mysql_query("SELECT DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id") 

mysql_query("SELECT * , DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id") 

primero uno está trabajando muy bien

ahora, cuando estoy tratando de seleccionar todos los campos estoy terminando con errores

estoy tratando de seleccionar el último de los duplicados digamos ticket_id 12 7 es 3 veces en el corredor de Identificación del 7,8,9 Así que quiero para seleccionarlo una vez con la última entrada que sería 9 en este caso, y esto se aplica en todo el resto de la ticket_id

Cualquier idea gracias

+2

La segunda consulta es incorrecta. Explique qué tarea está tratando de resolver – zerkms

+0

¿Qué otros campos está tratando de devolver? En el caso de que una columna tenga valores múltiples para un 'ticket_id' particular, ¿qué debería pasar entonces? –

+0

digamos ticket_id 127 es 3 veces en la fila id 7,8,9, así que quiero seleccionarlo una vez con la última entrada que sería 9 en este caso y esto aplica en el resto de ticket_id's ... Cualquier idea ahora - – Shanon

Respuesta

37

¿Está buscando una "SELECT * FROM temp_tickets GROUP BY ticket_id ORDER BY ticket_id?

ACTUALIZACIÓN

SELECT t.* 
FROM 
(SELECT ticket_id, MAX(id) as id FROM temp_tickets GROUP BY ticket_id) a 
INNER JOIN temp_tickets t ON (t.id = a.id) 
+0

que funciona pero estoy tratando de seleccionar el último de los duplicados, digamos que ticket_id 127 es 3 veces en la fila id 7,8,9, así que quiero seleccionarlo una vez con la última entrada que sería 9 en este caso y esto aplica en todo el resto de ticket_id's ... Cualquier idea ahora – Shanon

+1

Ver versión actualizada – a1ex07

56

DISTINCT no es una función que se aplica sólo a algunas columnas. Es un modificador de consulta que se aplica a todas las columnas en la lista de selección.

Es decir, DISTINCT reduce filas solo si todas las columnas son idénticas a las columnas de otra fila.

DISTINCT debe seguir inmediatamente después de SELECT (junto con otros modificadores de consulta, como SQL_CALC_FOUND_ROWS). Luego, siguiendo los modificadores de consulta, puede listar columnas.

  • DERECHA:SELECT DISTINCT foo, ticket_id FROM table...

    salida una fila para cada emparejamiento distinta de los valores a través de ticket_id y foo.

  • MAL:SELECT foo, DISTINCT ticket_id FROM table...

    Si hay tres valores distintos de ticket_id, ¿esto de retorno sólo tres filas? ¿Qué pasa si hay seis valores distintos de foo? ¿Qué tres valores de los seis valores posibles de foo se deberían generar?
    Es ambiguo como está escrito.

2

Se puede utilizar como la

mysql_query ("SELECT DISTINCT (ticket_id), columna 1, columna2, column3 DE temp_tickets ORDER BY ticket_id")

+0

Aunque MySQL permite la sintaxis, NO hace lo que cree que ... – Jannes

+0

No hay respuesta ... –

8

Puede utilizar grupo por en lugar de distinto. Porque cuando utilizas distintas, tendrás problemas para seleccionar todos los valores de la tabla. A diferencia de cuando usa agrupar por, puede obtener valores distintos y también todos los campos en la tabla.