【问题标题】:SQL joins conditionsSQL 连接条件
【发布时间】:2013-05-18 18:24:28
【问题描述】:

我有 3 张桌子 t1、t2 和 t3。以下是他们的架构。

我需要加入他们并且有条件。

  • 在 t1 表中,objectName 可以是以下 4 个之一:“ABC”、“DEF”、“GHI”或“JKL”。
  • 如果 t1.objectName 是 'ABC',我需要将 t1.idObject 与 t2.id1 连接起来。
  • 如果 t1.objectName 是 'DEF',我需要将 t1.idObject 与 t2.id2 连接起来。
  • 如果 t1.objectName 是 'GHI',我需要将 t1.idObject 与 t2.id3 连接起来。
  • 如果 t1.objectName 是 'JKL',我需要将 t1.idObject 与 t3.id4 加入。

我需要选择 t1.idObject、t1.objectName、t2.custName、t3.Message。

create table t1 (idObject int, objectName varchar(20));
create table t2 (id1 int, id2 int, id3 int, custName varchar(20));
create table t3 (id4 int, Message varchar(20));

insert into t1 values (101, 'ABC'), (102, 'DEF'), (103, 'GHI'), (104, 'JKL'), (105, 'ABC'), (106, 'DEF'), (107, 'GHI'), (108, 'JKL');

insert into t2 values (101, 102, 103, 'Val'), (105, 106, 107, 'Mil');

insert into t3 values (104, 'Message1'), (108, 'Messgage2');

select * from t1;
select * from t2;
select * from t3;

非常感谢您提供解释。

非常感谢。

【问题讨论】:

  • hm 我认为“正常”连接不会在这里执行此操作,在 t-sql 中您可以通过应用执行此操作,但 afaik mysql 不支持应用。很好奇这将如何在这里工作......
  • 在JKL的情况下,如何加入t2表

标签: mysql sql


【解决方案1】:

你可以试试这个:

SELECT
    t1.idObject, 
    t1.objectName, 
    t2.custName, 
    t3.Message
FROM 
    t1
LEFT JOIN t2
    ON t1.idObject = (
        CASE
            WHEN t1.objectName = 'ABC' THEN t2.id1
            WHEN t1.objectName = 'DEF' THEN t2.id2
            WHEN t1.objectName = 'GHI' THEN t2.id3
        ELSE 0
        END 
    )
LEFT JOIN t3
    ON t1.idObject = (
        CASE
            WHEN t1.objectName = 'JKL' THEN t3.id4
        ELSE 0
        END 
    )

【讨论】:

    【解决方案2】:

    您可以通过结合使用左连接和 coalesce() 来实现此目的。这是总体思路。

    select coalesce(t2.value, t3.value, t4.value) theValue
    from table1 t1 left join table2 t2 on something
    left join table2 t3 on something else
    left join table2 t4 on something different
    where whatever
    

    【讨论】:

      猜你喜欢
      • 2014-12-25
      • 2011-03-29
      • 2023-04-10
      • 2012-09-17
      • 2020-05-19
      • 2015-05-13
      相关资源
      最近更新 更多