我有多个表和主表中的外键。表格如下:
姐妹
'System.NullReferenceException' occurred in ServiceStack.dll but was not handled in user code
兄弟
MainID IDNO ....
111111 1 ....
111111 1 ....
111111 1 ....
222222 1 ....
111111 2 ....
叔伯
MainID IDNO ....
111111 555 ....
111111 333 ....
111111 111 ....
222222 222 ....
111111 321 ....
我需要连接所有MainID IDNO ....
111111 561 ....
111111 121 ....
111111 331 ....
222222 451 ....
111111 672 ....
但我似乎无法获得所有内容,例如我可能无法获得672
IDNo
我试图将表分开并稍后使用,但这种方式变慢了。我该怎么办?
预期输出:
SELECT
',' + S1.IDNo + ',' + B1.IDNo + ',' + U1.IDNo AS [text()]
FROM
Sisters S1, Brothers B1, Uncles U1, MainTable
WHERE
D1.MainID = MainTable.ID
AND S1.MainID = MainTable.ID
AND B1.MainID = MainTable.ID
FOR XML PATH('')
答案 0 :(得分:1)
根据预期的输出,似乎3个表中每个表中的MainID列在输出中都没有说明(,如果是这样)那么这应该适合你,虽然我不确定它会扩展处理600K +记录。出于好奇,你为什么要连接如此庞大的值列表?
Declare @x as varchar(max) = ''
SELECT @x = @x + ',' + CAST(A.IDNO as varchar) FROM
(
select 1 as IDNO UNION ALL
select 2 as IDNO UNION ALL
select 3 as IDNO UNION ALL
select 4 as IDNO
) A -- Pretend this is your Sisters tables
FOR XML PATH('')
PRINT @X -- Just for Debugging Purposes
SELECT @x = @x + ',' + CAST(B.ID as varchar) FROM
(
select 55 as IDNO UNION ALL
select 66 as IDNO UNION ALL
select 77 as IDNO UNION ALL
select 88 as IDNO
) B -- Pretend this is your Brothers tables
PRINT @X -- Just for Debugging Purposes
SELECT @x = @x + ',' + CAST(C.IDNO as varchar) FROM
(
select 555 as IDNO UNION ALL
select 666 as IDNO UNION ALL
select 777 as IDNO UNION ALL
select 888 as IDNO
) C -- Pretend this is your Uncles tables
PRINT @X -- Final Output
SELECT @X as XML_Output FOR XML PATH('')
输出
,1,2,3,4
,1,2,3,4,55,66,77,88
,1,2,3,4,55,66,77,88,555,666,777,888 -- Final Result
<XML>,1,2,3,4,55,66,77,88,555,666,777,888</XML> -- XML Output
所以在你的情况下,你可以做这样的事情(再次不确定它在大表上的表现):
Declare @x as varchar(max) = ''
SELECT @x = @x + ',' + CAST(A.IDNO as varchar) FROM
(
select MainID , IDNO FROM SISTERS UNION ALL
select MainID , IDNO FROM BROTHERS UNION ALL
select MainID , IDNO FROM UNCLES
) A
SELECT @X as XML_Output FOR XML PATH('')