首页 > 解决方案 > 如何在一个请求中获取用户及其所有图像?

问题描述

我有一个拥有 has_many images 连接表的用户。

我知道我可以做一个:

select *
from user,
     image
join user_images on...
where user_id = 'some_id'

这将在一个请求中为我提供数据,但是每个图像行都将复制其中的所有用户数据。

user_name, address, phone, image_1, image_1_path
user_name, address, phone, image_2, image_2_path
....

有没有办法在一个查询中做到这一点而没有任何数据重复?

我想一个理想的数据响应应该是这样的:

我想理想的是这样的回应:

user_name, address, phone
image_1, image_1_path
image_2, image_2_path
...<more unique images>

标签: sql

解决方案


据我了解,您希望看到空白user_nameaddress以及phone同一用户是否有多个图像。您可以ROW_NUMBER在以下情况下使用:

select 
    case when rn > 1 then '' else user_name end as user_name, 
    case when rn > 1 then '' else address end as address, 
    case when rn > 1 then '' else phone end as phone,
    image,
    image_path 
from (
    select *, row_number() over(partition by user_name, address, phone order by user_name) rn 
    from user
    join user_images on...
    where user_id = 'some_id'
) x

推荐阅读