【问题标题】:Join Tables with a condition加入有条件的表
【发布时间】:2019-01-14 02:13:01
【问题描述】:

我有 3 个表,比如说 Table1、Table2 和 Table3。我必须根据条件将 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' 是 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}

【问题讨论】:

  • 显示您的查询,您在尝试什么?
  • 我正在尝试 case when statement...但它显示错误...我使用... case when tab1.name='facebook' 然后离开 join Table2 when tab1.name='twitter ' 然后离开加入Table3
  • @SandeepNambiar 添加您当前尝试运行的查询。
  • conditional join in mysql的可能重复

标签: mysql sql


【解决方案1】:

试试这个查询:

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

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

【讨论】:

    【解决方案2】:
    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') ;
    

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

    Here is a Demo

    【讨论】:

      【解决方案3】:

      试试这个查询:

      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;
      

      【讨论】:

        猜你喜欢
        • 2020-07-20
        • 2014-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-25
        • 1970-01-01
        相关资源
        最近更新 更多