【发布时间】:2016-12-02 23:07:49
【问题描述】:
我有多个表,其中一个外键来自一个主表。表格是这样的:
姐妹
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 ....
我需要将所有IDNos 连接起来,但我似乎无法获得所有信息,例如我可能无法获得 672
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('')
我尝试分隔表并稍后合并,但这样会变得慢得多。我能做什么?
预期输出:
,1,1,1,1,2,555,333,111,222,321,561,121,331,451,672
【问题讨论】:
-
仅供参考:主表有大约 200.000 条记录,子表有大约 600.000 条记录。
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(20 多年前),不鼓励使用它 -
@marc_s 我也用过join,速度影响不大
-
想必你想要
union all,但没有样本结果,那只是推测。 -
这与速度无关,而是关于可读性,因此可维护性,并避免意外的交叉连接(笛卡尔积)....
标签: sql sql-server concatenation for-xml-path