我正在尝试查询两个表,在组合重复项时返回值。虽然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