sql-查找不需要红色部分的所有作业

时间:2018-12-16 18:27:55

标签: mysql join subquery

我有一个表'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');

不起作用,因为如果我理解正确的话,它会返回包含非红色部分的所有作业。

1 个答案:

答案 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'
)
相关问题