Mysql SELECT行NOT IN AND GROUP在一起

时间:2016-05-14 16:25:50

标签: mysql

我有2张桌子的时间表

//output should be like this
id   name
2    alex //he have schedule at 15, 23
4    john //he don't have any schedule

id 1 - ben希望将他的日程安排与其他人交换。

我需要SELECT FROM FROM FROM JOIN schedule和GROUP BY name

比我需要的那些用户名在2016-5-22没有任何时间表

SELECT name FROM user LEFT JOIN schedule ON user.id = schedule.id
WHERE year = 2016 && month = 5 && date != 22
比利和本在22岁的时间表,所以他们不会出现

我尝试写类似

的东西
uitextfield

但是这个查询仍会出现在比利,因为比利在2016-5-30有一行

是否有人可以帮助我解决此问题

2 个答案:

答案 0 :(得分:1)

您需要过滤组而不是行才能使查询正常工作。简单指南WHERE代表组的行

SELECT name FROM user LEFT JOIN schedule ON user.id = schedule.id
GROUP BY name
HAVING SUM(year = 2016)>0
AND SUM(month = 5)>0
AND SUM(date=22)=0

或更简单

...HAVING SUM(CONCAT(year,month,date)='2016522')=0

答案 1 :(得分:1)

以下查询将为您提供未安排在2016-5-22上工作的所有名称。

SELECT A.NAME FROM USER A 
WHERE A.ID NOT IN(
SELECT A.ID FROM USER A, SCHEDULE B 
WHERE (A.ID=B.ID)
AND B.YEAR=2016 AND B.MONTH=5 AND B.DATE=22
)