mysql select not 不起作用

标签 mysql sql

我只想选择没有产品 ID 为 11 的行的学生 ID。但我不能。我该怎么办?

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);

我只想要 36822479 因为 1598 有 11。

最佳答案

NOT EXISTS 非常适合这个:

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);

此外,我假设您的意思是您不需要 ID 11,因为我在您的示例中没有看到 14。

关于mysql select not 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47400883/

相关文章:

php - 真的在 CONCAT_WS 上苦苦挣扎......请帮助新手 :)

php - 通过PHP在MySQL中插入元素我得到语法错误

mysql - 我正在寻找将删除重复项的 SQL 代码,其中重复项被定义为两个特定字段的相等性

java - 删除MYSQL中的僵尸外键

php - 通过分组查找最大值

php - 使用 JOIN 匹配第一个结果

java - 我的代码的语法错误是什么? sql java

mysql - 如何更改数据库的 MySQL 日期格式?

python - 如何使用 Sqlalchemy postgres 搜索列中的多个值

php - 使固定宽度 <div> 的序列按四行显示