我有3个表,假设Table1,Table2和Table3.i必须根据条件将Table1与Table2或Table3连接起来。
|------------|---------------|
| 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
联接,并且如果我的第一个表'Name
'是{{1 }}表1应该与Twitter
连接
我在下面的查询中尝试过
Table3
答案 0 :(得分:3)
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') ;
您可以尝试上述查询吗,我对该查询进行了测试。
答案 1 :(得分:1)
尝试此查询:
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;
答案 2 :(得分:0)
尝试此查询:
with dt
(select *, namekey='facebook' from table2
union
select *, namekey='twitter' from table3)
select * from table1
inner join dt on table1.Name=dt.namekey