如何在同一张表上执行两次SQL JOIN

时间:2019-05-01 18:27:42

标签: sql join

我是该小组的新成员,这是我第一次发布问题。

我有tbl1,其中包含3列(id,类型,优先级)。数据如下:

id | type | priority
---+------+---------
1  |   1  |  1
2  |   2  |  1
3  |   1  |  2

我有tbl2,其中包含我的所有参考。数据如下:

id  | type1 | type2 | type3 | string
----+-------+-------+-------+---------
12  |   9   |   1   |    1  | single
12  |  10   |   1   |    2  | single
12  |   9   |   2   |    1  | carton
13  |   9   |   1   |    1  | low
13  |   9   |   2   |    1  | high
13  |   4   |   1   |    1  | low
14  |   9   |   1   |    1  | red
14  |   2   |   1   |    1  | red
14  |   9   |   2   |    1  | yellow

我想在tbl2tbl1.type = tbl2.type2id=12的{​​{1}}上加入type1=9

我还想在type3=1tbl2tbl1.priority = tbl2.type2的{​​{1}}上加入id=13

我的结果表应如下所示:

type1=9

这有意义吗?从本质上讲,只有一个引用表,但是需要针对表1中的各个列一遍又一遍地联接。我不知道是否需要联接,左联接,内部左联接。

4 个答案:

答案 0 :(得分:1)

您只需将表加入两次:

SELECT 
   tbl1.id, tbl2_t.string, tbl2_p.string
FROM tbl1
LEFT JOIN tbl2 AS tbl2_t ON tbl1.type = tbl2_t.type2 AND 
                               tbl2_t.id=12 AND tbl2_t.type1=9 AND tbl2_t.type3=1
LEFT JOIN tbl2 AS tbl2_p ON tbl1.priority = tbl2_p.type2 AND 
                               tbl2_p.id=13 AND tbl2_p.type1=9 AND tbl2_p.type3=1

答案 1 :(得分:0)

只需使用以下模板创建嵌套联接:(将<>之间的文本替换为您的表/列名称)

SELECT * FROM (

SELECT * FROM <dbo.myTable1> a
LEFT JOIN
        (SELECT * FROM <dbo.myTable2>) b ON a.<type> = b.<type2> WHERE b.<id>=12 AND b.<type1>=9 AND b.<type3>=1

) c  
  LEFT JOIN 
         (SELECT * FROM <dbo.myTable2>) d ON c.<priority> = d.<type2> WHERE c.<id>=13 AND c.<type1>=9 AND c.<type3>=1

答案 2 :(得分:0)

您可以使用两个不同的表别名

select a.id,  b.string, c.string 
from tbl1 a 
inner  join tbl2 b on a.type = b.type2 
    and b.id =12 
      and b.type1=9 
        and b.type3.=1
inner join tbl2 c on a.type = c.type2 
    and c.id =13 
      and c.type1=9 
        and c.type3.=1

答案 3 :(得分:0)

您可以在两个表之间的联接中使用“或”子句,以便在tbl1.type tlb2.type2时也可以在联接时,也可以在tbl1.priority = tbl2.type2 ...时联接……

select tbl1.Id, tbl2.string 
from tbl1 inner join tbl2on (tbl1 .type  =tbl2.type1) or (tbl1 .priority = tbl2.type2)
where type1 = 9 and type3 = 1