【问题标题】:how do I use sql DISTINCT,UNION with where clause我如何使用带有 where 子句的 sql DISTINCT,UNION
【发布时间】:2023-01-27 23:41:27
【问题描述】:

各位,

如何将 sql DISTINCT,UNION 与 where 子句一起使用?

“GDN”列在数据库表“GPG”中。

请推荐和解决方案。

谢谢

表格:GPD

PNM
GPPI12301001
GPPI12301002
GPPI82301001
GPPI82301002

表 : GPG

GDN PNM
A.04.01.002.001 GPPI12301001
A.04.01.002.001 GPPI12301002
A.04.01.008.001 GPPI82301001
A.04.01.008.001 GPPI82301002

期望的结果

PNM
GPPI12301001
GPPI12301002
 Dim query As String = "SELECT DISTINCT PNM FROM GPD UNION SELECT DISTINCT PNM FROM GPG ORDER BY PNM"

在 where 子句下面我的意思是在 GPG 数据库表中

WHERE GDN = 'A.04.01.002.001'

【问题讨论】:

  • UNION 只会将唯一值添加到结果集中
  • 你得到什么?你想达到什么目的?请发布要查询的示例表以及所需输出的示例。
  • SELECT DISTINCTUNION 结合没有意义。
  • minimal reproducible example 会让这更清楚。
  • @ClearlyClueless ,我已经更新了示例和所需的结果

标签: sql where-clause union distinct dbf


【解决方案1】:

每个SELECT 都有自己的WHERE 子句。 UNION 的最终结果为 ORDER BY

SELECT PNM
FROM GPD

UNION

SELECT PNM
FROM GPG
WHERE GDN = 'A.04.01.002.001'  -- belongs to the UNIONS's 2:nd SELECT

ORDER BY PNM  -- belongs to the whole UNION

【讨论】:

  • 你的答案仍然全部出现在“PNM”栏中
  • 是的,。并且您想要的结果有一个名为 PNM 的列。
【解决方案2】:
SELECT DISTINCT PNMs.PNM 
FROM (
        SELECT PNM FROM GPD
    UNION
        SELECT PNM
        FROM GPG
        WHERE GDN = 'A.04.01.002.001'
) PNMs
ORDER BY PNM

【讨论】:

  • UNION 根据定义只返回 DISTINCT 值
【解决方案3】:

只要您 UNION GPD 表中的所有 PNM 值,您就永远不会获得所需的输出。您将始终获得所有 PNM 值,而不是与给定 GDN 值相关的子集。

您只需要:

SELECT DISTINCT PNM
FROM GPG
WHERE GDN = 'A.04.01.002.001'
ORDER BY PNM

【讨论】:

    猜你喜欢
    • 2011-07-23
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2023-01-26
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多