我有14个表来描述分层XML数据结构。一个字段是行的键,另一个字段是其父键的外键。其余60个字段在每个表中都相同。
我想获得一个大的行序列列表,而不是水平添加列。
例如,以下设置为6列。如何将其序列化为3列和更多行?
SELECT ICN2.ICNID, ICN2.ICNTITLE, ICN2.PANE, ICN3.ICNID AS ICNID2,
ICN3.ICNTITLE AS ICNTITLE2, ICN3.PANE AS PANE2
FROM ICN2
LEFT OUTER JOIN ICN3 ON ICN2.ICN2_PKEY = ICN3.ICN2_FKEY
WHERE ICN2.ICNID = N'65587'
答案 0 :(得分:1)
使用SQL UNION
创建单个(别名)结果集,然后应用条件:
SELECT * FROM (
SELECT ICNID, ICNTITLE, PANE
FROM ICN2
UNION ALL
SELECT ICNID, ICNTITLE, PANE
FROM ICN3
UNION ALL
SELECT ICNID, ICNTITLE, PANE
FROM ICN4
... ) A
WHERE ICNID = N'65587'
这是mysql和postgres的语法,但确切的语法可能因您使用的数据库而异。
如果您需要知道哪些表来自哪个行,请为每行添加一个常量:
SELECT * FROM (
SELECT 'ICN2' as SOURCE, ICNID, ICNTITLE, PANE
FROM ICN2
UNION ALL
SELECT 'ICN3', ICNID, ICNTITLE, PANE
FROM ICN3
UNION ALL
... ) A
WHERE ICNID = N'65587'
BTW UNION ALL
保留排序和重复行。普通UNION
排序并删除重复的行。选择最适合你的