gpt4 book ai didi

mysql - 分别对表的每一行执行两个连接?

转载 作者:行者123 更新时间:2023-11-29 23:52:53 24 4
gpt4 key购买 nike

我正在构建一个管理用户出勤的网站的一部分。

涉及四个表:用户、出勤(多对多链接)和事件。

考勤表仅存储 userId 和 eventId 以及他们是否出席、缺席、生病或休假。

我正在尝试创建一个 mySQL 查询,该查询将显示每个没有出勤记录的用户事件对,即。他们没有被标记为在场、生病等。

我尝试使用从用户到出席的内部联接,然后从出席到事件的右联接,但这必须为每个用户单独执行。我不确定我的方向是否正确,或者不确定如何在 SQL 中迭代查询。

提前致谢!

更多信息:

用户表

+-----+---------+
|编号 |名称 |
+-----+---------+
| 104 | 104马修|
| 102 | 102凯夫 |
| 101 | 101 Julia |
+-----+---------+

出席

+----+--------+--------+-----+
|编号 |用户 ID |事件 ID |类型 |
+----+--------+---------+------+
| 16 | 16 104 | 104 47 | 47左 |
| 20 | 104 | 104 46 | 46左 |
| 21 | 21 104 | 104 45 | 45左 |
| 22 | 22 102 | 102 47 | 47左 |
| 23 | 23 102 | 102 46 | 46左 |
| 24 | 102 | 102 45 | 45左 |
| 28 | 28 102 | 102 44 | 44左 |
| 25 | 25 101 | 101 47 | 47左 |
| 26 | 26 101 | 101 46 | 46左 |
| 27 | 27 101 | 101 45 | 45左 |
+----+--------+---------+------+

事件

+----+------------+
|编号 |日期 |
+----+------------+
| 43 | 43 2014-08-01 |
| 44 | 44 2014-08-08 |
| 45 | 45 2014-08-15 |
| 46 | 46 2014-08-22 |
| 47 | 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。

+--------+---------+
|用户 ID |事件 ID |
+--------+---------+
| 104 | 104 43 | 43
| 104 | 104 44 | 44
| 102 | 102 43 | 43
| 101 | 101 43 | 43
| 101 | 101 44 | 44
+--------+---------+

最佳答案

我花了一段时间才弄清楚这个问题。我对 MySQL 不太热衷,所以我希望这个答案可以改进,但从根本上来说,您需要做的是获取不在出勤表中的用户和事件:

查询:

SELECT u.id as 'userID', e.id as 'eventID'
FROM event e
JOIN user u
WHERE e.id NOT IN (
SELECT DISTINCT event.id FROM event
INNER JOIN attendance ON attendance.eventId=event.id
WHERE attendance.userId=u.id AND event.date BETWEEN '2014-08-01' AND CURDATE()
)
AND e.date BETWEEN '2014-08-01' AND CURDATE()
ORDER BY u.id DESC;

结果:

+--------+---------+
| userID | eventID |
+--------+---------+
| 104 | 43 |
| 104 | 44 |
| 102 | 43 |
| 101 | 43 |
| 101 | 44 |
+--------+---------+

演示 SQL Fiddle: http://sqlfiddle.com/#!2/82dd9f/19/0

关于mysql - 分别对表的每一行执行两个连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25522914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com