Sql 动态连接条件

Sql 动态连接条件,sql,sql-server,sql-server-2012,inner-join,Sql,Sql Server,Sql Server 2012,Inner Join,我有一张桌子: Tbl1 +----+------+ | id | type | +----+------+ | 1 | 11 | | 1 | 22 | | 2 | * | +----+------+ Tbl2 +----+------+------+ | id | type | name | +----+------+------+ | 1 | 11 | AAA | | 1 | 22 | BBB | | 2 | 11 | CCC | | 2

我有一张桌子:

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  |
+----+------+------+

您可以在
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='*'

上的条件,然后尝试
。。。a、 type=当a.type='*'然后'*'否则b.type结束时的情况