我有一个具有has_many个图像联接表的用户。
我知道我可以做到:
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>
答案 0 :(得分:1)
据我了解,如果每个同一用户有多个图像,则希望看到空白的user_name
,address
和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
答案 1 :(得分:0)
看着我!看着我! :)
因此,接下来我将以我的理解进行解释:
现在我有两个表:user
,image
Ⅰuser
数据结构和假设数据:
enter image description here
Ⅱimage
数据结构和假设数据:
enter image description here
Ⅲ好吧,让我们选择一些类似于SQL的数据:
SELECT
*
FROM
`user`
LEFT JOIN image
ON `user`.id = image.user_id
AND,结果显示: enter image description here
但是,这不是我们想要的!
Ⅳ最终SQL:
SELECT
a.id,
a.`name`,
b.img
FROM
`user` a
LEFT JOIN (
SELECT
user_id,
GROUP_CONCAT(image) AS img
FROM
image
GROUP BY
user_id
) b ON a.id = b.user_id
以上SQL执行结果显示: enter image description here
Ⅴ真正的最后信息:))
这是您想要的吗?