我的下表有两个记录:
tableAB
[id - tid - t]
[1 - 1 - 1]
[2 - 1 - 2]
并在下面的两个表中加上记录:
tableA
[id - name]
[1 - mark]
tableB
[id - Aid - age]
[1 - 1 - 22 ]
我想做的事情如下:
SELECT
来自 tableA
列 name
SELECT
来自 tableB
列 age
和列 {{ 1}}来自name
基于tableA
使用Aid
如果列 tableAB
等于t
那么查询 1
的记录来自 SELECT
如果它等于tableA
那么它2
是来自 SELECT
的记录
列tableB
与两个表中的每一个相关tid
列 tableA, tableB
我想要做的是使用id
根据每个表中列 SELECT
的值tableAB
记录{/ 1}} strong>如果存在,
我该怎么做呢?有什么方法可以做到这一点?
我想我希望从SQL中获取它就像这样
t
但即使[id - name - age ]
[1 - mark - null]
[1 - mark - 22 ]
[2 - mario- null]
[2 - mario- 22 ]
[3 - max - null]
[3 - max - 22 ]
没有null
,我也不知道在列 age
上获取tableA
是否是一种好的形式。 t有列 age
以下是小提琴 https://www.db-fiddle.com/f/pHaER8RhA6kqxvDVVjtWUu/6中的表格,并在添加之前提供了答案。
答案 0 :(得分:1)
我想你想要以下内容:
select ab.*, a.name, b.age
from tableab ab left join
tablea a
on ab.t = 1 and ab.tid = a.id left join
tableb b
on ab.t = 2 and ab.tid = b.id;
答案 1 :(得分:1)
select ifnull(a.id,b.id) id,b.age,ifnull(a.name,(select name from tableA where id=b.aid))name
from tableAB ab left join
tableA a
on ab.t = 1 and ab.tid = a.id
left join
tableB b
on ab.t = 2 and ab.tid = b.id;
答案 2 :(得分:1)
此
select
tableAB.ID tab_id,
tableA.name taba_name,
null tabb_age
from
tableAB inner join tableA on tableAB.id = tableA.id
where tableAB.T = 1
union all
select
tableAB.ID tab_id,
null taba_name,
tableB.age tabb_age
from
tableAB inner join tableB on tableAB.id = tableB.id
where tableAB.T = 2
会产生:
TAB_ID TABA_NAME TABB_AGE
1 mark
1 22
答案 3 :(得分:1)
select tab.id, ta.name, null from tableAB as tab
left join tableA as ta on tab.tid = ta.id
where tabl.t = 1
union all
select tab.id, ta.name, tb.age from tableAB as tab
left join tableB as tb on tab.tid = tb.id
left join tableA as ta on tb.aid = ta.id
where tab.t = 2
OR
select
tab.id,
ifnull(ta.name, ta2.name)
tb.age
from tableAB as tab
left join tableA as ta on tab.t = 1 and tab.tid = ta.id
left join tableB as tb on tab.t = 2 and tab.tid = tb.id
left join tableA as ta2 on tb.aid = ta2.id