2017-11-20 2 views
0

Ich möchte nur Studenten IDs, die keine Zeile haben, wo Produkt-ID 11 ist. Aber ich kann nicht. Was soll ich machen?mysql wählen nicht funktioniert

BEGIN TRANSACTION; 
CREATE TABLE STUDENTS(Id integer PRIMARY KEY, name text,year_born integer 
); 

CREATE TABLE PROJECT(project_id integer,title text,project_owner 
text,year_written integer); 

CREATE TABLE PROJECTWORKS(student_id integer,project_id integer); 
INSERT INTO STUDENTS VALUES(1598,'james',1996); 
INSERT INTO STUDENTS VALUES(2479,'andre',1996); 
INSERT INTO STUDENTS VALUES(3682,'pierre',1997); 


INSERT INTO PROJECT VALUES(10,'A','ABC',2008); 
INSERT INTO PROJECT VALUES(11,'B','ABC',2010); 
INSERT INTO PROJECT VALUES(12,'C','ABC',2016); 
INSERT INTO PROJECT VALUES(13,'D','CBA',2014); 


INSERT INTO PROJECTWORKS VALUES(1598,10); 
INSERT INTO PROJECTWORKS VALUES(1598,11); 
INSERT INTO PROJECTWORKS VALUES(1598,12); 
INSERT INTO PROJECTWORKS VALUES(3682,12); 
INSERT INTO PROJECTWORKS VALUES(3682,13); 
INSERT INTO PROJECTWORKS VALUES(2479,12); 

SELECT * FROM STUDENTS; 
SELECT * FROM PROJECT; 
SELECT * FROM PROJECTWORKS; 

SELECT DISTINCT student_id FROM PROJECTWORKS 
WHERE not project_id=11 and (project_id=10 OR project_id=12 OR 
project_id=13); 

Ich will nur und Da 11. hat

+0

Nichts in Ihrem Code heißt 'product_id'. –

+0

Meinst du nicht 11? Ich sehe keine mit Produkt ID = 14? – kbball

+0

Anstelle von "x = 1 ODER x = 2 ODER x = 3" betrachte es als "x IN (1,2,3)". ja – tadman

Antwort

0

Wenn ich Sie recht verstanden wird, ist das, was Sie

SELECT DISTINCT student_id FROM PROJECTWORKS 
WHERE student_id not in 
(select student_id from PROJECTWORKS where project_id=11) 
+0

.Es funktioniert und ich understood.Thank Ihnen sehr –

0

wollen Sie ein verwenden könnte verbinden zwischen den beiden Ergebnis

select distinct student_id 
from PROJECTWORKS p 
where project_id NOT IN (11) 
INNER JOIN (
    Select distinct student_id 
    from PROJECTWORKS 
    where project_id IN (10, 12, 13) 
) T on t.student_id = p.student_id 
0
SELECT DISTINCT student_id FROM PROJECTWORKS 
WHERE student_id not in 
(select student_id from PROJECTWORKS where project_id=11) 

Ihre Frage ist nicht klar. über Code-Schnipsel für verschiedene STUDENT_ID ist, die besteht für diese perfekt sind nicht project_id als 11

1

NICHT:

SELECT DISTINCT student_id 
FROM PROJECTWORKS p 
WHERE project_id IN (10, 12, 13) 
AND NOT EXISTS 
(SELECT 1 
FROM PROJECTWORKS p2 
WHERE p.student_id = p2.student_id 
AND p2.project_id = 11); 

Auch gehe ich davon aus, Sie wollen nicht, ID 11 gemeint, wie ich ‚didn t siehe 14 in Ihrem Beispiel.

+0

ja 11, aber wenn ich nicht 11 und 10 wollen, was sould ich –

+0

finde ich ich will eigentlich diese dank Ihrer –

+0

DISTINCT STUDENT_ID SELECT hilft FROM Projektarbeiten p WO NICHT VORHANDEN (SELECT FROM 1 Projektarbeiten p2 WHERE p.student_id = p2.student_id uND p2.project_id = 14) und (SELECT FROM 1 Projektarbeiten p2 WHERE p.student_id = p2.student_id AND (p2.project_id = 10); –