【发布时间】:2020-06-08 16:11:43
【问题描述】:
我有具有多对多关系的 Coder 和 Programming language 实体。数据库结构如下:
coder
- id (primary key)
- name
proglang
- id (primary key)
- name
coder_to_proglang
- id (primary key)
- coder_id (foreign key for coder table)
- proglang_id (foreign key for proglang table)
问题是如何选择特定编码人员未知的编程语言?
我最好的 SQL 查询是:
select p.*, c.id as coder_id
from "proglang" as "p"
left join "coder_to_proglang" as "j" on "p"."id" = "j"."proglang_id"
left join "coder" as "c" on "c"."id" = "j"."coder_id"
where j.id is null or c.id != :coderId
我是这样想的:未知语言是未通过联结表与编码器链接的语言,因此联结表 ID 可以为 NULL,或者该语言也可以与不同的编码器。但这不起作用,因为其他编码员可以知道给定编码员知道的相同语言。
我还怀疑我们可以使用一些连接来实现从一组所有现有语言中减去一组已知语言,但不知道如何在 SQL 中描述这一点。
【问题讨论】:
标签: sql postgresql join select many-to-many