Mysql union 按行排除重复条目

我有这样的疑问:


SELECT * FROM `date1` UNION SELECT * FROM `date2` ORDER BY (count1+count2) DESC

我需要按“ID”列排除重复条目。


我可以用 UNION 来做这个吗?


更新:


表格1


+---------+--------+

| id      | count1 |

+---------+--------+

| 112337  | 567    |

+----+-------------+

表2


+---------+--------+

| id      | count1 |

+---------+--------+

| 112337  | 565    |

+----+-------------+

我只想显示第一个“id”数据。


慕无忌1623718
浏览 136回答 2
2回答

喵喔喔

您可以使用NOT EXISTS:SELECT * FROM date1 UNIONSELECT d2.* FROM date2 d2WHERE NOT EXISTS (SELECT 1 FROM date1 d1 WHERE d1.id = d2.id)如果您不想排除重复的行或者每个表中UNION ALL没有重复的行,也可以更改为,这会更有效。id

qq_笑_17

使用联合并将其包装在带有聚合的主查询中可能是您想要的。DROP TABLE IF EXISTS T,T1;CREATE TABLE T(ID INT, COUNT1 INT);CREATE TABLE T1(ID INT, COUNT1 INT);INSERT INTO T VALUES (1,567),(2,20);INSERT INTO T1 VALUES(1,565),(3,20);select tid ,         max(case when tcount1 is not null then tcount1 else t1count1 end) cntfrom(select id tid,count1 tcount1,null t1count1 from tunionselect  id tid,null tcount1,count1 from t1) sgroup by tid;+------+------+| tid  | cnt  |+------+------+|    1 |  567 ||    2 |   20 ||    3 |   20 |+------+------+3 rows in set (0.001 sec)
打开App,查看更多内容
随时随地看视频慕课网APP