1

我有 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;

带有解释的查询将不胜感激。

非常感谢。

4

2 回答 2

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 
    )
于 2013-05-23T12:07:24.747 回答
0

您可以通过结合使用左连接和 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
于 2013-05-23T12:10:05.167 回答