sql - 如何进行一对多查询?
问题描述
我有表用户。每个用户都有自己的视频。这是一对多的关系。一位用户有很多视频。
- 如何编写查询以选择 users.name,其中 video.name 为“Video1”或“Video2”?
- 如何编写查询以选择 users.name、video.name 其中 video.name 为“Video1”或“Video2”?
在第二个问题中,我们必须合并 video.name,因为它是一对多的关系。
解决方案
如果您在 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
推荐阅读
- java - JPA 检索带有空格的枚举
- python - 熊猫更改列日期格式
- ios - 在 UILabel iOS 中的点后显示带有两位小数的浮点值时遇到问题
- javascript - 如何防止 setInterval 函数在 Javascript 中执行两次?
- node.js - 如何在角度5中导入电子
- python - 为什么 localhost:5000 在 Flask Python 中不起作用?
- node.js - 处理来自 UI 请求的空数组参数
- excel - 在 VBA 中插入带变量的公式
- scala - 在函数 scala 中传递 DEFAULTS 参数
- php - 当通过 ajax 生成内容时,tablesorter JS 不起作用