2015-10-05 38 views
0

我有表:动态JOIN条件

Tbl1 
+----+------+ 
| id | type | 
+----+------+ 
| 1 | 11 | 
| 1 | 22 | 
| 2 | * | 
+----+------+ 


Tbl2 
+----+------+------+ 
| id | type | name | 
+----+------+------+ 
| 1 | 11 | AAA | 
| 1 | 22 | BBB | 
| 2 | 11 | CCC | 
| 2 | 22 | DDD | 
+----+------+------+ 

我想加入的ID和类型。但是,如果type ='*'我想要所有类型。 如何加入Tbl1和Tbl2来达到这个效果?

喜欢的东西:

SELECT a.* FROM Tbl2 a 
INNER JOIN Tbl1 b ON a.id = b.id 
AND a.type = b.type ?? (i want use case statement to achieve this result) 

result 
+----+------+------+ 
| id | type | name | 
+----+------+------+ 
| 1 | 11 | AAA | 
| 1 | 22 | BBB | 
| 2 | 11 | CCC | 
| 2 | 22 | DDD | 
+----+------+------+ 
+0

尝试'... a.type = case when a.type ='*'then'*'else b.type end' – amdixon

回答

0

可以包括on子句中的条件:

SELECT a.* 
FROM Tbl2 a INNER JOIN 
    Tbl1 b 
    ON a.id = b.id AND 
     (a.type = b.type OR a.type = '*' OR b.type = '*'); 

目前还不清楚是否打算为通配符同时适用于表或只有一个。如果其中一个,则删除a.type = '*'上的条件。

+0

谢谢你的工作! – user3867892