为了账号安全,请及时绑定邮箱和手机立即绑定

Mysql union 按行排除重复条目

Mysql union 按行排除重复条目

PHP
慕无忌1623718 2023-07-01 17:43:38
我有这样的疑问: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”数据。
查看完整描述

2 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

您可以使用NOT EXISTS:


SELECT * FROM date1 

UNION

SELECT d2.* FROM date2 d2

WHERE NOT EXISTS (SELECT 1 FROM date1 d1 WHERE d1.id = d2.id)

如果您不想排除重复的行或者每个表中UNION ALL没有重复的行,也可以更改为,这会更有效。id


查看完整回答
反对 回复 2023-07-01
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

使用联合并将其包装在带有聚合的主查询中可能是您想要的。


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) cnt

from

(select id tid,count1 tcount1,null t1count1 from t

union

select  id tid,null tcount1,count1 from t1

) s

group by tid;


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

| tid  | cnt  |

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

|    1 |  567 |

|    2 |   20 |

|    3 |   20 |

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

3 rows in set (0.001 sec)


查看完整回答
反对 回复 2023-07-01
  • 2 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信