У меня есть таблица 'job', которая содержит конечные продукты, и таблица 'part', которая содержит отдельные части, из которых сделаны конечные продукты.Третья таблица «supp_part_job» связывает задания и части вместе (поскольку они находятся в отношении: 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');
, который не работает, так как это - если я понимаюправильно - возвращает все задания, которые содержат любую часть, которая не является красной.