w3schools columns all mysql union distinct

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'' ) );