如何在SQL中结合WHERE子句使用DISTINCT与UNION?
解决方案:在UNION查询的子句中添加WHERE条件并结合DISTINCT
直接在针对GPG表的查询部分追加WHERE子句即可,同时可以做一个小优化:UNION本身会自动对合并后的结果集去重,所以原语句里的DISTINCT其实是冗余的,可以省略(不影响最终结果,还能简化语句)。
修改后的语句(保留原写法)
如果你想保持原语句的DISTINCT写法,只需要在GPG的查询部分加上WHERE条件:
Dim query As String = "SELECT DISTINCT PNM FROM GPD UNION SELECT DISTINCT PNM FROM GPG WHERE GDN = 'A.04.01.002.001' ORDER BY PNM"
优化后的语句
因为UNION会自动去除两个结果集中的重复记录,所以子查询里的DISTINCT完全没必要,简化后的语句更高效:
Dim query As String = "SELECT PNM FROM GPD UNION SELECT PNM FROM GPG WHERE GDN = 'A.04.01.002.001' ORDER BY PNM"
结果验证
执行上述语句后,GPD表的所有PNM会和GPG表中GDN='A.04.01.002.001'的PNM合并,通过UNION自动去重后,最终得到你期望的结果:
PNM GPPI12301001 GPPI12301002
内容的提问来源于stack exchange,提问作者roy
相关产品推荐
相关产品推荐

