SQL LEFT JOIN to table 由内部 SELECT 的结果确定
SQL LEFT JOIN to table determied by result from inner SELECT
我只是想知道这是否可能。
我正在尝试显示一个 table 的所有结果,并从各自的组 (table)
中获取更多详细信息
+--------------------------+ +--------------------------+
| table group_a | | table group_b |
+--------------------------+ +--------------------------+
| id name age | | id name age |
| s01 John 10 | | s11 Clark 11 |
| s02 Jane 11 | | s12 Cherry 09 |
+--------------------------+ +--------------------------+
+----------------------------+
| table result_1 |
+----------------------------+
| id result group |
| s01 9 a |
| s12 10 b |
| s11 9 b |
| s02 7 a |
+----------------------------+
我希望得到这个输出
id name age result
+------------------------------------+
s12 Cherry 09 10
s01 John 10 9
s11 Clark 11 9
s02 Jane 11 7
我对如何将我的查询指向不同的 table 感到困惑。
无论如何,我只想知道这是否可行,或者我应该采用不同的方法。
B'rgrds,
您可以使用 left join
两次:
select r.id, coalesce(a.name, b.name) as name, coalesce(a.age, b.age) as age,
r.result
from result_1 r left join
group_a a
on r.group = 'a' and r.id = a.id left join
group_b b
on r.group = 'b' and r.id = b.id;
我希望上面的有更好的性能,但你也可以在加入之前使用 union all
:
select r.id, ab.name, ab.age, r.result
from result_1 r left join
((select id, name, age, 'a' as group
from group_a a
) union all
(select id, name, age, 'b' as group
from group_b b
)
) ab
on r.group = ab.group and r.id = as.id ;
注意:最好将所有组放在一个 table 中,而不是将它们分成多个 table。
我只是想知道这是否可能。 我正在尝试显示一个 table 的所有结果,并从各自的组 (table)
中获取更多详细信息+--------------------------+ +--------------------------+
| table group_a | | table group_b |
+--------------------------+ +--------------------------+
| id name age | | id name age |
| s01 John 10 | | s11 Clark 11 |
| s02 Jane 11 | | s12 Cherry 09 |
+--------------------------+ +--------------------------+
+----------------------------+
| table result_1 |
+----------------------------+
| id result group |
| s01 9 a |
| s12 10 b |
| s11 9 b |
| s02 7 a |
+----------------------------+
我希望得到这个输出
id name age result
+------------------------------------+
s12 Cherry 09 10
s01 John 10 9
s11 Clark 11 9
s02 Jane 11 7
我对如何将我的查询指向不同的 table 感到困惑。 无论如何,我只想知道这是否可行,或者我应该采用不同的方法。
B'rgrds,
您可以使用 left join
两次:
select r.id, coalesce(a.name, b.name) as name, coalesce(a.age, b.age) as age,
r.result
from result_1 r left join
group_a a
on r.group = 'a' and r.id = a.id left join
group_b b
on r.group = 'b' and r.id = b.id;
我希望上面的有更好的性能,但你也可以在加入之前使用 union all
:
select r.id, ab.name, ab.age, r.result
from result_1 r left join
((select id, name, age, 'a' as group
from group_a a
) union all
(select id, name, age, 'b' as group
from group_b b
)
) ab
on r.group = ab.group and r.id = as.id ;
注意:最好将所有组放在一个 table 中,而不是将它们分成多个 table。