声明表
| id |
+----+
| 1 |
| 2 |
冲突表
| declarationId | title |
+---------------+--------+
| 1 | qqq |
| 1 | wwww |
| 2 | ttttt |
使用子查询
进行查询SELECT
dd.[Id],
(SELECT ',' + Title
FROM [dbo].[Conflicts] cc
WHERE cc.DeclarationId = dd.Id
FOR XML PATH(''))
FROM
[dbo].[Declarations] dd
结果
| 1 | ,qqq,wwww, |
| 2 | ,ttttt, |
如何在没有子查询的情况下实现相同的结果?
我想使用全文索引创建视图,但是无法使用子查询在视图上创建索引。
答案 0 :(得分:0)
如果没有子查询,您无法在SQL Server 2012中执行此操作,尽管Gordon指出,您可以在用户定义的函数中隐藏子查询。但是,我怀疑这样做不会达到你能够用全文索引创建视图的目的,所以我认为你需要找到另一种方法来做你想做的事情,不管是什么。
答案 1 :(得分:0)
WITH CTE_TableName AS
(
SELECT DeclarationId, Title
FROM Conflicts
)
SELECT t0.DeclarationId
,STUFF((
SELECT ',' + t1.Title
FROM CTE_TableName t1
WHERE t1.DeclarationId = t0.DeclarationId
ORDER BY t1.Title
FOR XML PATH('')), 1, LEN(','), '') AS Titles
FROM CTE_TableName t0
GROUP BY t0.DeclarationId
ORDER BY DeclarationId;
答案 2 :(得分:0)
在不使用子查询的情况下创建连接或选择的最佳选择是创建用户定义的函数,如前所述。
创建用户定义的函数,如下所示:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION AppendString()
RETURNS varchar(100)
AS
BEGIN
DECLARE @temp VARCHAR(50);
SELECT @temp = ',' + Title
FROM [dbo].[Conflicts] cc
WHERE cc.DeclarationId = dd.Id
FOR XML PATH('')
RETURN @temp
END
GO
然后使用连接语句中的函数
SELECT
dd.Id, AppendString AS Title
FROM
Declarations DD
INNER JOIN
Conflicts CC ON DD.Id = CC.declarationId