2010-06-24 21 views
6

¡Hola a todos!¿Cómo ignorar una columna para seleccionar distinct en postgresql?

Tengo un SQL (ver arriba) y me gustaría saber cómo puedo asegurarme de que no obtengo los dobles solo con respecto al nombre. si aparece un nombre en la primera selección, es el maestro y debe ignorarse en las siguientes selecciones.

"SELECT name, id, 'place' AS tablename FROM places WHERE lower(name) LIKE '".strtolower($needle)."%'" 
    ."UNION SELECT name, id, 'community' AS tablename FROM communities WHERE lower(name) LIKE '".strtolower($needle)."%'" 
    ."UNION SELECT name, id, 'district' AS tablename FROM districts WHERE lower(name) LIKE '".strtolower($needle)."%'" 
    ."UNION SELECT name, id, 'region' AS tablename FROM regions WHERE lower(name) LIKE '".strtolower($needle)."%'" 
    ."UNION SELECT name, id, 'province' AS tablename FROM provinces WHERE lower(name) LIKE '".strtolower($needle)."%'" 
    ."ORDER BY name LIMIT 10" 

este es mi SQL.

¿necesita más información?

gracias

+0

SQL Injection Alert! –

+0

es solo para probar cómo funciona, la seguridad viene después ;-) – helle

+1

¿podría decirme dónde está la inyección? ahora estoy en el paso de seguridad ;-) – helle

Respuesta

5

DISTINCT

SELECT DISTINCT ON (name) name, id, tablename 
FROM (
    SELECT name, id, 'place' AS ... 
    UNION ... 
    UNION ... 
    UNION ... 
    UNION ...) AS subQuery 
ORDER BY name LIMIT 10 

Sólo especifique que sólo lo hacen distinto en el name mediante el uso de su consulta como una sub-consulta.

Haga el límite y el orden durante el distinto, de lo contrario el distinto podría descartar duplicados y no renunciar a las 10 filas completas en el orden correcto ordenado.

+0

si lo agrego a cada selección, se seleccionan diferentes tablas disticnt, pero en la unión tengo dobles. – helle

+0

Whoops, se perdió eso. Pruebe la nueva consulta editada. –

+0

gracias ... pero no funciona en absoluto :-( tengo que usar un alias para la subconsulta ... Seleccione Distinct ... FROM (...) COMO nombre de la subconsulta ORDEN ... ahora trabajos – helle

Cuestiones relacionadas