Php Mysql union按行排除重复条目

Php Mysql union按行排除重复条目,php,mysql,sql,Php,Mysql,Sql,我有一个疑问: SELECT * FROM `date1` UNION SELECT * FROM `date2` ORDER BY (count1+count2) DESC 我需要按“ID”列排除重复条目 我能和工会合作吗 更新: 表1 +---------+--------+ | id | count1 | +---------+--------+ | 112337 | 567 | +----+-------------+ 表2 +---------+--------+

我有一个疑问:

SELECT * FROM `date1` UNION SELECT * FROM `date2` ORDER BY (count1+count2) DESC
我需要按“ID”列排除重复条目

我能和工会合作吗

更新:

表1

+---------+--------+
| id      | count1 |
+---------+--------+
| 112337  | 567    |
+----+-------------+
表2

+---------+--------+
| id      | count1 |
+---------+--------+
| 112337  | 565    |
+----+-------------+

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

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

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)

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

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)
您可以使用“不存在”:

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

您可以使用NOT EXISTS:


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

请提供示例数据和所需结果,以便明确您要完成的任务。我有两个表“date1”和“date2”。它们都有“id”列。我想在结果中排除重复的“id”。在date1和date2之间的奇怪引用是怎么回事?您的表名中有实际的双引号吗?没有tadman抱歉,它只是从php代码中复制的。仅表“date1”和表“date2”。要排除还是合并?通常情况下,您会使用GROUP BY来完成此操作。请提供示例数据和所需结果,以便清楚地了解您要实现的目标。我有两个表“date1”和“date2”。它们都有“id”列。我想在结果中排除重复的“id”。在date1和date2之间的奇怪引用是怎么回事?您的表名中有实际的双引号吗?没有tadman抱歉,它只是从php代码中复制的。仅表“date1”和表“date2”。要排除还是合并?通常你会用分组的方式来做。我认为这是一个很好的答案,而且是可以接受的。但请向可能有此问题的其他用户解释此答案。对于exmaple,什么是d2.*、d2和d2.id等?d2和d1是表date2和date1的别名。在子查询中:从date1 d1中选择1,其中d1.id=d2.id这些别名用于限定属于不同表的2个id列。我认为这是一个很好的答案,可以接受。但请向可能有此问题的其他用户解释此答案。对于exmaple,什么是d2.*、d2和d2.id等?d2和d1是表date2和date1的别名。在子查询中:从date1 d1中选择1,其中d1.id=d2.id这些别名用于限定属于不同表的2个id列。