postgresql 基于案例条件连接

rpppsulh  于 2023-04-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(106)

我有两个表表A和 * 表B**。连接这两个表的关键是ID
表A
| ID|代码|代码_T|
| --------------|--------------|--------------|
| 1|一百|一百|
| 二|一百零一|二百九十|
| 三|一百零二|三百|
表B
| 身份证|姓名|描述|
| --------------|--------------|--------------|
| 1|一个|ABC|
| 二|一个|ABC|
| 二|B|CDE|
我所期待的是处理来自TableB的重复ID,通过限制以下条件来避免笛卡尔积

**1.如果表A.code_T = 290,则仅与TableB中TableB所在的行连接。Name = A并返回TableB。描述

2.如果TableA.code_T = 300,则仅与TableB中的行连接,其中TableB.Name = B并返回TableB。说明**

bzzcjhmw

bzzcjhmw1#

根据描述,您需要以下条件才能加入:

select a.id, a.code, a.code_T, b.description 
from tablea a join tableb b
on a.id = b.id and (a.code_t, b.name) in ((290, 'A'), ('300', 'B'))

或等同物:

select a.id, a.code, a.code_T, b.description
from tablea a join tableb b
on a.id = b.id and (   (a.code_t = 290 and b.name = 'A') 
                    or (a.code_t = 300 and b.name = 'B') )

dbfiddle
这样,除了290或300之外,所有code_T的行都将被忽略。

相关问题