我正在建立一个管理用户出勤的网站的一部分。单独在表格的每一行上执行两个连接?
有四个表涉及:用户,出席(多对多链接)和事件。
考勤表只存储userId和eventId以及他们是否在场,缺席,生病或休假。
我正在尝试创建一个mySQL查询,它将显示没有出席记录的每个用户事件对。他们没有被标记为存在,生病等
我曾尝试使用INNER JOIN从用户出席,然后从出席事件的右加入,但这将不得不为每个用户单独执行。我不知道我是否正朝着正确的方向前进,或者确定如何使查询在SQL中迭代。
在此先感谢!
更多信息:
用户表
+-----+---------+ | id | name | +-----+---------+ | 104 | Matthew | | 102 | Kev | | 101 | Julia | +-----+---------+
出席
+----+--------+---------+------+ | id | userId | eventId | type | +----+--------+---------+------+ | 16 | 104 | 47 | L | | 20 | 104 | 46 | L | | 21 | 104 | 45 | L | | 22 | 102 | 47 | L | | 23 | 102 | 46 | L | | 24 | 102 | 45 | L | | 28 | 102 | 44 | L | | 25 | 101 | 47 | L | | 26 | 101 | 46 | L | | 27 | 101 | 45 | L | +----+--------+---------+------+
活动
+----+------------+ | id | date | +----+------------+ | 43 | 2014-08-01 | | 44 | 2014-08-08 | | 45 | 2014-08-15 | | 46 | 2014-08-22 | | 47 | 2014-08-29 | +----+------------+
我尝试:
SELECT * FROM `user`
INNER JOIN attendance ON user.id=userId
RIGHT JOIN event ON attendance.eventId=event.id
WHERE event.date BETWEEN '2014-08-01' AND CURDATE()
目标
理想情况下,我想一个表中不存在的记录的用户id和事件ID返回。
+--------+---------+ | userId | eventId | +--------+---------+ | 104 | 43 | | 104 | 44 | | 102 | 43 | | 101 | 43 | | 101 | 44 | +--------+---------+
发表您的意见,表格结构等所以我们知道你在用什么 – 2014-08-27 09:00:45
这有帮助吗? – Martt 2014-08-27 09:27:56
好多了,欢呼:) – 2014-08-27 09:30:46