首页 > 解决方案 > 从联合中获取每个 ID 的单个记录

问题描述

我在一张表中存储了 100 条广告文本,它们可以是预定的,也可以是默认的。我想为每个 cust_id 返回一条记录。

我有两个选择 sql 查询 - 第一个检查客户是否有预定的文本,第二个获取默认值。

SELECT
            id, cust_id
        FROM
            texts
        WHERE
            over18 = FALSE
            AND now()
            BETWEEN ad_start_date
            AND ad_end_date)
    UNION ALL (
        SELECT
            id, cust_id
        FROM
            texts
        WHERE
            over18 = FALSE
            AND texts.default = TRUE
        ORDER BY
            created_at DESC)

问题是第二个选择为每个 cust_id 返回多个记录。

标签: sqlpostgresql

解决方案


如果您需要基于集合的结果,那么您应该使用UNION而不是UNION ALL. 你可以在这里阅读更多关于它们的区别。另一种方法是使用该DISTINCT子句。


推荐阅读