postgreSQL三个表只使用JOIN



我有三个表:T1fromT2(client)和T3(供应商),它也充当黑名单T1:行客户和供应商的id

  • 我想获得供应商的id客户端可以从

.

目前T1有三行:

T1_id | T2_id | T3_id
1      1       3 
2      1       4 
3      2       3 

我试着:

select T3.id 
from T1 
left join T2 on T2.id = T1.T2_id
right join T3 on T3.id != T1.T3_id 
where T2.id = 1

输出为:

1
2
3
1
2
4

应该只有1和2。我错过了什么?它在T2下工作得很好。Id = 2.

你也可以这样做

select T3.id from T1, T2, T3
where 
T1.T2_id = T2.id and
T3.id <> T1.T3_id and
T2.id = 1 

我希望这对你有帮助

所以你有

  • 客户端列表
  • 供应商名单
  • 客户和供应商之间的地图。

这应该是你的表格布局。

clients
---------
client_id [PK]
client_label
suppliers
---------
supplier_id [PK]
supplier_label
client_suppliers
----------------
client_supplier_id [PK]
client_id 
supplier_id 

然后您只需选择哪些供应商映射到特定的客户。

SELECT 
supplier_id
, supplier_label
FROM 
suppliers T1 
INNER JOIN 
client_suppliers T2 ON T2.supplier_id = T1.supplier_id
WHERE 
T2.client_id = 1

最新更新