我有3个表看起来像: 表1:
╔════╦═══════╗
║ id ║ name ║
╠════╬═══════╣
║ 1 ║ name1 ║
╚════╩═══════╝
表2:
╔════╦════════════╗
║ id ║ data1 ║
╠════╬════════════╣
║ 1 ║ some data1 ║
║ 1 ║ some data2 ║
║ 1 ║ some data3 ║
╚════╩════════════╝
表3:
╔════╦═══════╗
║ id ║ data2 ║
╠════╬═══════╣
║ 1 ║ 456 ║
║ 1 ║ 345 ║
╚════╩═══════╝
结果我想得到连接表,如果某些表中没有这样的数据,那么将是空值。我希望得到这样的东西:
╔════╦═══════╦════════════╦════════╗
║ id ║ name ║ data1 ║ data2 ║
╠════╬═══════╬════════════╬════════╣
║ 1 ║ name1 ║ some data1 ║ 456 ║
║ 1 ║ name1 ║ some data2 ║ 345 ║
║ 1 ║ name1 ║ some data3 ║ null ║
╚════╩═══════╩════════════╩════════╝
我无法弄清楚我该怎么做。我尝试使用外连接,但结果有重复。也许有可能使用group by或其他agregate函数?
现在我的代码是:
SELECT * FROM Table1 t1
left outer join Table2 t2 on t1.id=t2.id
left outer join Table3 t3 on t1.id=t3.id
是否有可能获得我想要的结果以及如何做到这一点?
答案 0 :(得分:3)
首先,您需要将Table1
的每一行复制到N
次,其中N
是来自Table2
和{{1}的相关行的最大数量}。这可以使用计数表来完成。
然后,使用Table3
向ROW_NUMBER
和Table2
添加另一个ID,并在Table3
条件中使用新创建的ID:
JOIN
答案 1 :(得分:0)