基于第三个表中的列值从两个表中选择记录

时间:2018-04-01 13:04:41

标签: mysql sql

我的下表有两个记录:

   tableAB
[id - tid - t]
[1  - 1   - 1]
[2  - 1   - 2]

并在下面的两个表中加上记录:

     tableA
[id    -    name]
[1     -    mark]

      tableB
[id -  Aid -  age]
[1  -  1   -  22 ]

我想做的事情如下:

  1. SELECT 来自 tableA name

  2. SELECT 来自 tableB age {{ 1}}来自name基于tableA

  3. 使用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中的表格,并在添加之前提供了答案。

4 个答案:

答案 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