这些是我的表格:
MITARBEITER (mid, mname, abtid*)
PROJEKT (prjid, prjname, prjleiter*)
ARBEITSPAKETE (prjid, apid, apbezeichnung, umfangstd)
ARBEITET_AN (mid*, prjid*, apid*, anzahlstd)
ABTEILUNG (abtid, abtname)
我想从我的Mitarbeiter表中选择所有名字,他们没有为Projektname“Optimierung Einkauf”工作。
这是我的Sql:
SELECT DISTINCT MITARBEITER.mname
FROM MITARBEITER
JOIN ARBEITET_AN
ON MITARBEITER.MID = ARBEITET_AN.MID
JOIN ARBEITSPAKETE
ON ARBEITET_AN.prjid = ARBEITSPAKETE.prjid
JOIN PROJEKT
ON ARBEITSPAKETE.prjid = PROJEKT.prjid
where NOT (PROJEKT.prjname = 'Optimierung Einkauf') ;
我试过了:
SELECT DISTINCT MITARBEITER.mname
FROM MITARBEITER
JOIN ARBEITET_AN
ON MITARBEITER.MID = ARBEITET_AN.MID
JOIN ARBEITSPAKETE
ON ARBEITET_AN.prjid = ARBEITSPAKETE.prjid
join PROJEKT
ON ARBEITSPAKETE.prjid = PROJEKT.prjid
where PROJEKT.prjname <> 'Optimierung Einkauf';
为什么我得到为Projekt工作的Mitarbeiter?
答案 0 :(得分:1)
我在想NOT EXISTS
或NOT IN
:
SELECT ma.mname
FROM MITARBEITER ma
WHERE NOT EXISTS (SELECT 1
FROM ARBEITET_AN a JOIN
ARBEITSPAKETE asp
ON a.prjid = asp.prjid JOIN
PROJEKT p
ON asp.prjid = p.prjid
WHERE ma.MID = a.MID AND p.prjname = 'Optimierung Einkauf'
);
答案 1 :(得分:1)
您可以使用anot输入适用于您不想要的项目的所有名称
SELECT DISTINCT MITARBEITER.mname
FROM MITARBEITER
JOIN ARBEITET_AN ON MITARBEITER.MID = ARBEITET_AN.MID
JOIN ARBEITSPAKETE ON ARBEITET_AN.prjid = ARBEITSPAKETE.prjid
where MITARBEITER.mname not in (
SELECT DISTINCT MITARBEITER.mname
FROM MITARBEITER
JOIN ARBEITET_AN ON MITARBEITER.MID = ARBEITET_AN.MID
JOIN ARBEITSPAKETE ON ARBEITET_AN.prjid = ARBEITSPAKETE.prjid
JOIN PROJEKT ON ARBEITSPAKETE.prjid = PROJEKT.prjid
and PROJEKT.prjname = 'Optimierung Einkauf' ;
)