我是该小组的新成员,这是我第一次发布问题。
我有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
我想在tbl2
,tbl1.type = tbl2.type2
和id=12
的{{1}}上加入type1=9
。
我还想在type3=1
,tbl2
和tbl1.priority = tbl2.type2
的{{1}}上加入id=13
。
我的结果表应如下所示:
type1=9
这有意义吗?从本质上讲,只有一个引用表,但是需要针对表1中的各个列一遍又一遍地联接。我不知道是否需要联接,左联接,内部左联接。
答案 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