我有一个表'job',其中包含最终产品;一个表'part',其包含最终产品所构成的各个零件。 第三个表“ supp_part_job”将作业和零件链接在一起(因为它们处于n:n关系)。 我想找到所有不包含红色部分的最终产品(=“工作”)。
相关表格:
CREATE TABLE IF NOT EXISTS `part` ( `PARTNO` varchar(2) NOT NULL DEFAULT '', `PARTNAME` varchar(10) DEFAULT NULL, `COLOR` varchar(10) DEFAULT NULL, `WEIGHT` int(5) DEFAULT NULL, `CITY` varchar(20) DEFAULT NULL, PRIMARY KEY (`PARTNO`) ) CREATE TABLE IF NOT EXISTS `job` ( `JOBNO` varchar(2) NOT NULL DEFAULT '', `JOBNAME` varchar(20) DEFAULT NULL, `CITY` varchar(20) DEFAULT NULL, PRIMARY KEY (`JOBNO`) ) CREATE TABLE IF NOT EXISTS `supp_part_job` ( `SUPPNO` varchar(2) NOT NULL DEFAULT '', `PARTNO` varchar(2) NOT NULL DEFAULT '', `JOBNO` varchar(2) NOT NULL DEFAULT '', `QUANTITY` int(5) DEFAULT NULL, PRIMARY KEY (`SUPPNO`,`PARTNO`,`JOBNO`), KEY `SUPP_PART_JOB_JOB_FK1` (`JOBNO`), KEY `SUPP_PART_JOB_PART_FK1` (`PARTNO`) )
这是如何完成的,可以同时作为子查询和联接吗?
我尝试过:
select distinct jobno from supp_part_job where partno in (select partno from part where color != 'red');
不起作用,因为如果我理解正确的话,它会返回包含非红色部分的所有作业。
答案 0 :(得分:0)
下面的子查询查找您不需要的所有作业。外部查询找到您想要的那个。
select distinct jobno
from job
where jobno not in (
select jobno
from supp_part_job pj
join part p on p.partno = pj.partno
where color = 'red'
)