MYSQL UNION DISTINCT

Ada*_*dam 30 mysql union distinct

我有两个选择,我目前正在成功运行UNION.

(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);
Run Code Online (Sandbox Code Playgroud)

结果如下:

100 Melbourne Australia
200 NewYork America
300 Tokyo Japan
100 Sydney Australia
Run Code Online (Sandbox Code Playgroud)

catch是查询将带来重复的user_id(在本例中为100).第一个查询中的详细信息先于我,如果在第二个查询中重复user_id,则不需要它.

有没有办法让UNION成为列上的DISTINCT?在这种情况下user_id?有没有办法进行上述调用而不是获取重复的user_id - 删除第二个.我应该以不同的方式重新编写查询,而不是使用UNION.真的希望它作为一个查询 - 如果需要,我可以使用SELECT和PHP来清除重复.

亚当

zer*_*kms 35

不可以.您无法指定需要区分的确切字段.它只适用于整行.

至于您的问题 - 只需将查询作为子查询和外部查询 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
Run Code Online (Sandbox Code Playgroud)