【发布时间】:2026-02-23 06:15:02
【问题描述】:
我必须在目录中找到所有 id = 101 的提供者拥有的所有汽车部件的提供者的名称,使用 JOIN 子句。输出中不需要提供者 id = 101。
'Providers' 是第一个包含 id 和 nameProvider 的表。 'Catalog' 是包含 id 和 idp(汽车零件 ID)的第二个表
查询:
select nameProvider
from Providers p
where p.id != 101
and not exists (
select idp from Catalog c1 where c1.id = 101
minus
select idp from Catalog c2 where c2.id = p.id
)
;
我该如何重写它?
【问题讨论】:
-
NOT EXISTS可以重写为反连接。我喜欢NOT EXISTS比反连接好得多,但也许这就是任务。另一种选择是CROSS JOINall 101 部分与所有提供者,然后LEFT OUTER JOIN他们的真实部分,看看你是否有每个 101 部分的匹配项(COUNT(*) vs.COUNT(own part)`)。 -
注意:JOIN是一个操作符,不是一个子句。
标签: mysql sql join inner-join