我有两张桌子:服装和react .我需要展示特定用户在过go 48小时内喜欢特定服装的前6套服装,然后是其他服装.这很管用,但我从第二个查询中得到了重复的衣服,我再次重复了这些衣服.我想确认一下这套衣服.id是唯一的.

如何删除这些副本?

(select outfit.id,
        outfit.title,
        ro.type,
        ro.outfit_id,
        ro.sub,
        ro.created_at as reaction_created_at,
        0 as priority
 from outfit
          left join reaction_outfit ro on outfit.id = ro.outfit_id
 where ro.sub = '123' and ro.created_at >= (NOW() - INTERVAL '48 hours')
 order by reaction_created_at desc nulls last LIMIT 6)
union
(select outfit.id,
        outfit.title,
        ro.type,
        ro.outfit_id,
        ro.sub,
        ro.created_at as reaction_created_at,
        1 as priority
 from outfit
          left join reaction_outfit ro on outfit.id = ro.outfit_id
 where is_public = true
 order by outfit.created_at desc)
order by priority, outfit_created_at desc;

Postgres 13.2版

推荐答案

根据它的定义,priority列将阻碍unions 删除重复项的能力,因为unions 的两部分永远不会重复.您可以在这里try 使用DISTINCT ON方法:

select *
from
(
select distinct on (id) *
from (
(select
     outfit.id,
     outfit.title,
     ro.type,
     ro.outfit_id,
     ro.sub,
     ro.created_at as reaction_created_at,
     0 as priority
 from outfit
 left join reaction_outfit ro on outfit.id = ro.outfit_id
 where ro.sub = '123' and ro.created_at >= (NOW() - INTERVAL '48 hours'
 order by reaction_created_at desc nulls last
 limit 6
)
union
(select
     outfit.id,
     outfit.title,
     ro.type,
     ro.outfit_id,
     ro.sub,
     ro.created_at,
     1
 from outfit
 left join reaction_outfit ro on outfit.id = ro.outfit_id
 where is_public = true
)
) t
order by id, priority
) t
order by priority, reaction_created_at desc;

Sql相关问答推荐

Select 最大值,但当并列时,从其他列 Select 最大值

从以前的非空值行中获取值

有没有办法用SQL编写一条CASE语句,如果列A&>0,那么列B,列C=0

如何根据特定的内部json元素值过滤postgres查询结果?

连接三个表的正确方式是什么?在这三个表中,可以显示在一个表上的行将在其他表中显示结果

SQL Select 最小优先级

通过之前的连接-这是Oracle的错误吗?

Select 非重复值并按条件排除行

在查询Oracle SQL中创建替代ID

根据时间、状态和相关行在PostgreSQL中的存在来删除行

统计PostgreSQL中前10个最大大小表的行数

SQL JSON_QUERY 使用列中的值构造 json 路径并接收错误

如何对 jsonb 中的字段执行求和,然后使用结果过滤查询的输出

JSON对象查询SQL服务器

避免在SQL中使用具有相同条件的多个子查询

使用对 nvarchar 列的多个 LIKE 操作优化 SQL 查询

将有效数字作为 varchar 返回的 SQL 函数

在 SQL 的每行选项中 Select 最大值

使用 json_agg 从 SQL 查询获取 [null] 响应

SQL - 汇总多个表的结果