英文:
SQL - Make join when multiple columns have the same key
问题
我有一个类似的SQL表格:
索赔 m1 m2 m3
1 0 20 100
2 0 25 105
...
1000 5 30 95
还有一个键表格:
M_Id M_Description
0 描述0
1 描述1
2 描述2
...
200 描述200
M_Id是m1、m2和m3的关键。
我应该如何进行连接,得到一个表格如下:
索赔 m1 m2 m3
1 描述0 描述20 描述100
2 描述0 描述25 描述105
...
1000 描述5 描述30 描述95
英文:
I have a SQL table like:
claim m1 m2 m3
1 0 20 100
2 0 25 105
...
1000 5 30 95
and a key table like:
M_Id M_Description
0 des0
1 des1
2 des2
...
200 des200
M_Id is the key for m1, m2 and m3.
How can I make the join to get a table like:
claim m1 m2 m3
1 des0 des20 des100
2 des0 des25 des105
...
1000 des5 des30 des95
答案1
得分: 1
你需要三个连接
选择 t.claim,d1.M_Description m1,d2.M_Description m2,d3.M_Description m3
从我的表 t
加入我的描述 d1 在(t.m1=d1.m_id)
加入我的描述 d2 在(t.m2=d2.m_id)
加入我的描述 d3 在(t.m3=d3.m_id)
每个id列将被单独连接,在结果集中,您可以使用相应连接表的描述,并使用别名。
英文:
You need three joins
select t.claim, d1.M_Description m1, d2.M_Description m2, d3.M_Description m3
from my_table t
join my_description d1 on (t.m1=d1.m_id)
join my_description d2 on (t.m2=d2.m_id)
join my_description d3 on (t.m3=d3.m_id)
Every id column will be joined individually, and in result set you could use descriptions of corresponding join table with alias.
答案2
得分: 1
...或者您可以加入一次并使用聚合:
select p.claim,
max(case when k.m_id = t.m1 then k.m_description end) m_description1,
max(case when k.m_id = t.m2 then k.m_description end) m_description2,
max(case when k.m_id = t.m3 then k.m_description end) m_description3
from mytable t
inner join keytable k on k.m_id in (t.m1, t.m2, t.m3)
group by p.claim
英文:
... Or you can join once and the use aggregation:
select p.claim,
max(case when k.m_id = t.m1 then k.m_description end) m_description1,
max(case when k.m_id = t.m2 then k.m_description end) m_description2,
max(case when k.m_id = t.m3 then k.m_description end) m_description3
from mytable t
inner join keytable k on k.m_id in (t.m1, t.m2, t.m3)
group by p.claim
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论