基于表1的行级列数据和表2的列级列数据的两个表提取数据

问题描述 投票:0回答:2

我想在两个表之间进行选择操作,其中表 1(l_id) 中的单个列数据分布到表 2(g_id, p_id) 中的多个列中,如何编写查询

表 1

e_id, name, l_id
123    dog   789
123    cat   543
123    owl   602

表 2

f_id, e_id, g_id, p_id
098    123   789   543
099    123   602   602
100    123   543   543
101    123   543   789
102    123   789   789 

我想从 table1 中获取名称字段作为主要输出,这样 g_id 对应名称和 p_id 对应名称进入单独的列,如下所示。

输出:

e_id, g_name, g_id, p_name, p_id
123     dog    789   cat     543
123     owl    602   owl     602
123     cat    543   cat     543
123     cat    543   dog     789
123     dog    789   dog     789

我尝试了 Union ALL, OR 运算符,但这只是一个子查询,J 有另一个表来进行连接操作以获得完全不同的数据。请帮助了解如何在此场景中执行 JOIN。寻找更多的 JOIN 操作。

sql crud
2个回答
0
投票

你只是在一个普通的join之后——只需要join同一个表两次;一次为

p_id
一次为
g_id

select t2.e_id, tg.name g_name, t2.g_id, tp.name p_name, t2.p_id
from table2 t2
inner join table1 tg on tg.l_id = t2.g_id
inner join table1 tp on tp.l_id = t2.p_id

db-fiddle 示例


0
投票

如果我理解正确你的问题,你只需要加入。

select t2.e_id,
    t1g.name g_name,
    t2.g_id,
    t1p.name p_name,
    t2.p_id
from table2 t2
join table1 t1g on (t1g.l_id = t2.g_id and t1g.e_id=t2.e_id)
join table1 t1p on (t1p.l_id = t2.p_id and t1p.e_id=t2.e_id)

不清楚

e_id
是否可以不同,所以我通过它加入on子句以防万一。

© www.soinside.com 2019 - 2024. All rights reserved.