上周末我问过这个问题,在任何人回答之前,它都被埋在了档案馆里。如果你已经看过这个,请原谅我。
我教课程,希望能够选择那些上过一堂课而不是另一堂课的学生。我有两个表:lessons_slots,它是每个类的表,例如:
--------------------
-ID名称插槽 -
-1基础10 -
-2提前10 -
-3基础10 -
---------------------
另一个表是class_roll,它保存注册信息,例如:
--------------------
-sID classid firstname lastname-
-1 1 Jo Schmo
-2 1人2 ...
-13 2 Jo Schmo
---------------------
我想做什么,我选择没有高级班的每个人(例如)。我试过了
SELECT *
来自lesson_slots
LEFT JOIN class_roll
ON lessons_slots.ID = class_roll.classid
lesson_slots.name!='advanced'
但这不起作用......它所做的就是消除那一行,而不会消除用户。例如,我希望Jo Schmo不会出现在结果中。有什么想法吗?
答案 0 :(得分:0)
SELECT * FROM class_roll cl LEFT JOIN lessons_slots ls
ON cl.classid = ls.id AND ls.name != 'advanced'
所以你真的要删除行?好吧:
DELETE FROM class_roll cl LEFT JOIN lessons_slots ls
ON cl.classid = ls.id AND ls.name != 'advanced'
答案 1 :(得分:0)
不漂亮,但有效。
SELECT c.*
FROM lessons_slots l
join class_roll c on l.id=c.classid
where concat(firstname,lastname) not in (select concat(firstname,lastname)
from lessons_slots l
join class_roll c on l.id=c.classid where name='advanced')
答案 2 :(得分:0)
你可以尝试一下
的效果SELECT FirstName, LastName FROM class_roll
WHERE NOT EXISTS
(SELECT * FROM class_roll, lesson_slots
WHERE class_roll.classid = lesson_slots.ID
AND lesson_slots.name = 'advanced')
然后,您可以将结果用作DELETE查询的基础。