我有以下格式的多个表:
表用户-
ID lang
1 EN
2 EN
3 DE
表a-
ID event1 event2
1 5 1
2 null 1
3 11 null
表b-
ID event1 event10
1 2 1
3 2 null
因此,在concat/join id列上的表之后,我的最终表将如下所示:
最终表格-
ID lang A_event1 A_event2 B_event1 B_event10
1 EN 5 1 2 1
2 EN null 1 null null
3 DE 11 null 2 null
因此,我在这里有多个问题,首先,如何正确地执行联接,以便别名与表名匹配,并具有最终唯一的列名,即使事件在列中具有相同的命名,而且我希望所有缺少的值也具有空值(如表b中没有user id=2)。
到目前为止,我的尝试没有成功,因为列名将在没有唯一id的情况下重复,并且缺少的值没有正确地用null填充。
我已经尝试过的例子:
select t1.*, t2.*, t3.*
from users t1
left join
A t2
using (ID)
left join
B t3
using (ID)
我可以通过编程来构造查询以提供灵活性,但是我想知道这种情况下的正确语法。
谢谢。
2条答案
按热度按时间3mpgtkmj1#
你用两个左连接的尝试看起来很好。不过,我建议不要使用
using(id)
连接表的语法:涉及3个表,与哪个表不明确id
所引用的列,这可能导致结果集中缺少记录:我看不出这个查询将如何生成重复的
id
结果集中的(只要id
在每个表中都是唯一的,如示例数据所示)。ma8fv8wu2#
如果表中的非id列是唯一的,则可以将其表示为:
这个
id
在三个表中表示相同的内容,因此使用using
. 事实上,using
在使用外部设备时非常方便join
s(尽管与full join
).我不太喜欢使用
select *
. 在这种情况下,这是不合适的,因为列不是唯一的。因此,编写查询的好方法是: