带条件的连接表

xjreopfe  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(333)

我有3个表,比如说表1,表2和表3。我必须根据一个条件将表1与表2或表3连接起来。

|------------|---------------|
|      id    |  Name         |
|------------|---------------|
|      1     |  facebook     |
|------------|---------------|
|      2     |  twitter      |
|------------|---------------|

|------------|---------------|-------------|
|      id    |  tab1_id      |   value     |
|------------|---------------|-------------|
|      1     |  1            |    val1     |
|------------|---------------|-------------|
|      2     |  2            |    val3     |
|------------|---------------|-------------|

|------------|---------------|-------------|
|      id    |  tab1_id      |   value     |
|------------|---------------|-------------|
|      1     |  1            |    val5     |
|------------|---------------|-------------|
|      2     |  2            |    val6     |
|------------|---------------|-------------|

ddl地址:

create table tbl1 (id int,  Name varchar(10));
insert into tbl1 values
(1,'facebook'),
(2,'twitter');

create table tbl2 (id int,tab1_id int,  value varchar(10));
insert into tbl2 values
(1,1,'val1'),
(2,2,'val3');

create table tbl3 (id int,tab1_id int,  value varchar(10));
insert into tbl3 values
(1,1 ,'val5'),
(2,2 ,'val6');

这里我需要一个连接,如果我的第一个表 'Name'facebook 表1应与 Table2 如果我的第一张table Name '是 Twitter 表1应与 Table3 我试过了

SELECT tab1.*
from Table1 as tab1
case 
        when tab1.name='facebook' then left join Table2 on {condition} 
        when tab1.name='twitter' then left join Table3 on {condition}
r3i60tvu

r3i60tvu1#

尝试此查询:

with dt
(select *, namekey='facebook' from table2
union 
select *, namekey='twitter' from table3)

select * from table1
inner join dt on table1.Name=dt.namekey
deyfvvtc

deyfvvtc2#

SELECT `T1`.`Name`, 
(CASE WHEN (`T1`.`Name` = 'facebook') THEN `T2`.`value` 
WHEN (`T1`.`Name` = 'twitter') THEN `T3`.`value` END) AS tab3_value 
FROM table1 T1 
LEFT JOIN table2 T2 ON (`T2`.`tab1_id` = `T1`.`id` AND `T1`.`Name` = 'facebook') 
LEFT JOIN table3 T3 ON (`T3`.`tab1_id` = `T1`.`id` AND `T1`.`Name` = 'twitter') ;

你能试试上面的查询吗,我测试了这个查询。
这是一个演示

chhkpiq4

chhkpiq43#

尝试此查询:

select *,
       case when name = 'facebook' then
         (select value from tbl2 where tab1_id = t1.id)
       else
         (select value from tbl3 where tab1_id = t1.id)
       end value
from tbl1 t1;

相关问题