SQL 服务器从数据库中检索另一个行列表中的行列表
SQL Server retrieve list of rows inside another list of rows from database
这听起来可能令人困惑,但也很容易。但是试了几种方法都没用
现在我有一个 table User
包含这些列
- 编号
- 用户名
- 文件编号
- 文字
还有一个tableFile
- 编号
- 文件名
和第三个 table UserDetails
- 编号
- 姓名
- 姓氏
User
& File
在匹配 Id
时使用外键 FileId
链接
类似地 User
和 UserDetails
与外键 UserId
和 Id
.
链接
所以我在 SQL 中创建了一个视图:
CREATE VIEW [dbo].[vw_NewView] AS
SELECT
U.Text as Text,
UD.Name + ' ' + UD.LastName AS FullName
FROM
User U
LEFT OUTER JOIN
dbo.UserDetails UD on UD.Id = U.UserId
现在我得到了一个结果集:
Text FullName
entry 1 NAme1
entry 2 Name2
注意:每个User
都会关联一个UserDetails
,即User
与Userdetails
是一对一的关系。
但是User
和File
是一对多的关系,所以每个User
可以有多个文件。
如何为每个用户检索这些文件?
像这样
Text FullName FileName
entry 1 NAme1 File1
File2
entry 2 Name2 File1
File2
File3
CREATE VIEW [dbo].[vw_NewView] AS
SELECT
[Text] = CASE WHEN RowNum = 1 THEN [Text] END,
FullName = CASE WHEN RowNum = 1 THEN Name + ' ' + LastName END,
[File]
FROM (
SELECT
U.[Text],
UD.Name,
UD.LastName,
F.[File],
RowNum = ROW_NUMBER() OVER (PARTITION BY UserId ORDER BY FileID)
FROM dbo.[User] U
LEFT JOIN dbo.UserDetails UD on UD.Id = U.UserId
LEFT JOIN dbo.[File] F ON F.FileID = UD.FileID
) t
我用 Stuff
得到了想要的输出,下面是代码。
CREATE VIEW [dbo].[vw_NewView] AS
SELECT
U.Text as Text,
UD.Name + ' ' + UD.LastName AS FullName,
SUBSTRING(
(
SELECT ','+CAST(U.Id AS VARCHAR) +'_'+F.FileName AS [text()]
FROM File F
WHERE U.Id = F.NoteId
ORDER BY U.Id
FOR XML PATH ('')
), 2, 1000) [FileName]
FROM
User U
LEFT OUTER JOIN
dbo.File F on UD.Id = U.NoteId
GO
这对我有用。我的答案是一串逗号分隔值。
输出:
Text FullName FileName
entry 1 NAme1 File1,File2
entry 2 Name2 File1,File2,File3
这听起来可能令人困惑,但也很容易。但是试了几种方法都没用
现在我有一个 table User
包含这些列
- 编号
- 用户名
- 文件编号
- 文字
还有一个tableFile
- 编号
- 文件名
和第三个 table UserDetails
- 编号
- 姓名
- 姓氏
User
& File
在匹配 Id
时使用外键 FileId
链接
类似地 User
和 UserDetails
与外键 UserId
和 Id
.
所以我在 SQL 中创建了一个视图:
CREATE VIEW [dbo].[vw_NewView] AS
SELECT
U.Text as Text,
UD.Name + ' ' + UD.LastName AS FullName
FROM
User U
LEFT OUTER JOIN
dbo.UserDetails UD on UD.Id = U.UserId
现在我得到了一个结果集:
Text FullName
entry 1 NAme1
entry 2 Name2
注意:每个User
都会关联一个UserDetails
,即User
与Userdetails
是一对一的关系。
但是User
和File
是一对多的关系,所以每个User
可以有多个文件。
如何为每个用户检索这些文件?
像这样
Text FullName FileName
entry 1 NAme1 File1
File2
entry 2 Name2 File1
File2
File3
CREATE VIEW [dbo].[vw_NewView] AS
SELECT
[Text] = CASE WHEN RowNum = 1 THEN [Text] END,
FullName = CASE WHEN RowNum = 1 THEN Name + ' ' + LastName END,
[File]
FROM (
SELECT
U.[Text],
UD.Name,
UD.LastName,
F.[File],
RowNum = ROW_NUMBER() OVER (PARTITION BY UserId ORDER BY FileID)
FROM dbo.[User] U
LEFT JOIN dbo.UserDetails UD on UD.Id = U.UserId
LEFT JOIN dbo.[File] F ON F.FileID = UD.FileID
) t
我用 Stuff
得到了想要的输出,下面是代码。
CREATE VIEW [dbo].[vw_NewView] AS
SELECT
U.Text as Text,
UD.Name + ' ' + UD.LastName AS FullName,
SUBSTRING(
(
SELECT ','+CAST(U.Id AS VARCHAR) +'_'+F.FileName AS [text()]
FROM File F
WHERE U.Id = F.NoteId
ORDER BY U.Id
FOR XML PATH ('')
), 2, 1000) [FileName]
FROM
User U
LEFT OUTER JOIN
dbo.File F on UD.Id = U.NoteId
GO
这对我有用。我的答案是一串逗号分隔值。
输出:
Text FullName FileName
entry 1 NAme1 File1,File2
entry 2 Name2 File1,File2,File3