Mysql根据条件消除用户

时间:2010-06-03 14:50:09

标签: mysql

上周末我问过这个问题,在任何人回答之前,它都被埋在了档案馆里。如果你已经看过这个,请原谅我。

我教课​​程,希望能够选择那些上过一堂课而不是另一堂课的学生。我有两个表: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不会出现在结果中。有什么想法吗?

3 个答案:

答案 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查询的基础。