2016-12-09 6 views
0

1-й столOracle SQL: ГДЕ НЕ EXITSTS не функционирует должным образом

CREATE TABLE qualified (
    facultyid integer NOT NULL, 
    courseid character varying(16) NOT NULL, 
    datequalified character varying(16), 
    dq2 date, 
    CONSTRAINT qualified_pkey PRIMARY KEY (facultyid, courseid) 
); 

INSERT INTO qualified VALUES (3467, 'ISM 4212', to_date('9/1995', 'MM/YYYY'), date '1995-09-01'); 
INSERT INTO qualified VALUES (4756, 'ISM 3112', to_date('9/1991', 'MM/YYYY'), date '1991-09-01'); 
INSERT INTO qualified VALUES (2143, 'ISM 3113', to_date('9/1988', 'MM/YYYY'), date '1988-09-01'); 
INSERT INTO qualified VALUES (4756, 'ISM 3113', to_date('9/1991', 'MM/YYYY'), date '1991-09-01'); 
INSERT INTO qualified VALUES (2143, 'ISM 3112', to_date('9/1988', 'MM/YYYY'), date '1988-09-01'); 
INSERT INTO qualified VALUES (3467, 'ISM 4930', to_date('9/1996', 'MM/YYYY'), date '1996-09-01'); 

второй таблице:

CREATE TABLE faculty (
    facultyid integer NOT NULL, 
    facultyname character varying(25), 
    CONSTRAINT faculty_pkey PRIMARY KEY (facultyid) 
); 

INSERT INTO faculty VALUES (2143, 'Birkin'); 
INSERT INTO faculty VALUES (3467, 'Berndt'); 
INSERT INTO faculty VALUES (4756, 'Collins'); 

Следующий запрос с оператором минус отображается правильный результат:

SELECT q.facultyid, facultyname 
FROM qualified q, faculty fa 
WHERE q.facultyid = fa.facultyid AND courseid = 'ISM 3113' 
MINUS 
SELECT q.facultyid, facultyname 
FROM qualified q, faculty fa 
WHERE q.facultyid = fa.facultyid AND courseid = 'ISM 4930'; 

Следующие WHERE NOT EXISTS отображают неверный результат

SELECT q.facultyid, facultyname 
FROM qualified q, faculty fa 
WHERE q.facultyid = fa.facultyid AND courseid = 'ISM 3113' 
AND NOT EXISTS (SELECT q.facultyid, facultyname 
        FROM qualified q, faculty fa 
        WHERE q.facultyid = fa.facultyid AND courseid = 'ISM 4930'); 

ответ

0

Следующие работали. 2-е предложение WHERE должно содержать ALIAS, ссылаясь на таблицу, указанную в первом предложении FROM, которые содержат все столбцы, которые должны быть перечислены в первом предложении SELECT.

SELECT q.facultyid, facultyname 
FROM qualified q, faculty fa 
WHERE q.facultyid = fa.facultyid AND courseid = 'ISM 3113' 
AND NOT EXISTS (SELECT q.facultyid, facultyname 
        FROM qualified q2, faculty fa2 
        WHERE q2.facultyid = fa.facultyid AND courseid = 'ISM 4930'); 

Better запрос:

SELECT fa.facultyid, facultyname 
FROM qualified q, faculty fa 
WHERE q.facultyid = fa.facultyid AND courseid = 'ISM 3113' 
AND NOT EXISTS (SELECT facultyid 
        FROM qualified 
        WHERE facultyid = fa.facultyid AND courseid = 'ISM 4930'); 

Благодаря учебнику 'Joel Murach MySQL' за то, что подобный вопрос.