columns - UNION MYSQL DISTINT
union mysql php (2)
Tengo dos selecciones que actualmente estoy ejecutando como UNION con éxito.
(SELECT a.user_id,a.updatecontents as city,b.country
FROM userprofiletemp AS a
LEFT JOIN userattributes AS b ON a.user_id=b.user_id
WHERE typeofupdate=''city'')
UNION DISTINCT
(SELECT a.user_id,c.city,c.country
FROM userverify AS a
LEFT JOIN userlogin AS b ON a.user_id=b.user_id
LEFT JOIN userattributes AS c ON a.user_id=c.user_id
WHERE b.active=1 AND a.verifycity=0);
Los resultados vuelven así:
100 Melbourne Australia
200 NewYork America
300 Tokyo Japan
100 Sydney Australia
El problema es que la consulta traerá un user_id duplicado (en este caso, el 100). Los detalles en la primera consulta me preceden y si el ID de usuario se repite en la segunda consulta, no la necesito.
¿Hay alguna manera de hacer que una UNIÓN sea DISTINTA en una columna? en este caso el user_id? ¿Hay una manera de hacer la llamada anterior y no obtener duplicados user_id''s? Suelte el segundo. ¿Debería volver a escribir la consulta de manera diferente y no usar UNION? Realmente lo quiero como una consulta: puedo usar para SELECT y PHP para eliminar duplicados si es necesario.
gracias Adam
No. No puede especificar con qué campo exacto se debe distinguir. Solo funciona con toda la fila.
A partir de su problema, simplemente haga de su consulta una subconsulta y en una externa GROUP BY
user_id
SELECT * FROM
(SELECT a.user_id,a.updatecontents as city,b.country
FROM userprofiletemp AS a
LEFT JOIN userattributes AS b ON a.user_id=b.user_id
WHERE typeofupdate=''city'')
UNION DISTINCT
(SELECT a.user_id,c.city,c.country
FROM userverify AS a
LEFT JOIN userlogin AS b ON a.user_id=b.user_id
LEFT JOIN userattributes AS c ON a.user_id=c.user_id
WHERE b.active=1 AND a.verifycity=0) x
GROUP BY user_id
(SELECT a.user_id,a.updatecontents as city,b.country
FROM userprofiletemp AS a
LEFT JOIN userattributes AS b ON a.user_id=b.user_id
WHERE typeofupdate=''city'')
UNION ALL
(SELECT a.user_id,c.city,c.country
FROM userverify AS a
LEFT JOIN userlogin AS b ON a.user_id=b.user_id
LEFT JOIN userattributes AS c ON a.user_id=c.user_id
WHERE b.active=1 AND a.verifycity=0
AND a.user_id NOT IN
( SELECT user_id
FROM userprofiletemp
WHERE typeofupdate=''city''
)
);