首页 > 解决方案 > 如何进行一对多查询?

问题描述

我有表用户。每个用户都有自己的视频。这是一对多的关系。一位用户有很多视频。

  1. 如何编写查询以选择 users.name,其中 video.name 为“Video1”或“Video2”?
  2. 如何编写查询以选择 users.name、video.name 其中 video.name 为“Video1”或“Video2”?

在第二个问题中,我们必须合并 video.name,因为它是一对多的关系。

标签: sql

解决方案


如果您在 SSMS 或其他平台中查询,您尚未指定。在 T-SQL 中,正确的语法是(假设主键名为“user_id”)

Select users.name
from users inner join video on users.user_id = video.user_id 
where video.name in ('Video1', 'Video2')

Select users.name, video.name
from users inner join video on users.user_id = video.user_id 
where video.name in ('Video1', 'Video2')

相反,如果您需要为每个用户提供一行,则应使用 XML PATH()

select users.name ,
 STUFF(
                 (SELECT ',' + name FROM video where video.user_id = users.user_id FOR XML PATH ('')), 1, 1, ''
               ) as Movies
               from users
group by users.name, users.user_id

Stuff 和 FOR XML Path 的工作原理


推荐阅读