UNION未删除重复项



我正在尝试查询两个表,在组合重复项时返回值。虽然UNION应该删除重复项,但在这种情况下它似乎失败了。请注意,此查询是用PHP发送的。

查询

<?php

$keywords = 'MOTOR';

$toSend = "SELECT part as Column1, '' as Column2 FROM soldParts WHERE part LIKE '%".$keywords."%' UNION SELECT part as Column1, vin as Column2 FROM vinData WHERE part LIKE '%".$keywords."%' ORDER BY column1 ASC";

?>


电流输出

第1列第2列

电机1

电机2

电机2CCDD44

电动机3AABB1122

电机3


期望输出

第1列第2列

电机1

电机2CCDD44

电动机3AABB1122


我查了几个类似的问题。然而,我的第二列应该只是合并(或连接(,不像其他问题和/或它们不涉及多个表。还要注意,表soldParts Column2没有值。

您的结果集实际上没有重复项。重复是指所有列都具有相同值的行,并且结果集中没有一行符合该定义。

大概,您希望在外部查询中进行聚合:

select column1, max(column2) column2
from (
select part as column1, null as column2 from soldparts where part like ?
union all
select part as column1, vin as column2 from vindata where part like ?
)
group by column1
order by column1 asc

请注意,我修改了您的查询以使用绑定参数(?(;为了安全和高效,您应该学会使用参数化查询,而不是在查询字符串中串联变量。

要获得所需结果,需要在UNION之上(但在ORDER BY之前(执行聚合。

例如:

select Column1, max(Column2) as Column2
from (
SELECT part as Column1, '' as Column2 
FROM soldParts 
WHERE part LIKE ?
UNION 
SELECT part, vin
FROM vinData 
WHERE part LIKE ?
) x
GROUP BY Column1
ORDER BY Column1

最新更新