考虑两个表。 Worker 表具有诸如 W_ID、W_Name
之类的字段。类(class)表包含 C_ID、C_Name、C_Date
等字段。
一个 worker 可以选修多门类(class),一门类(class)也可以由许多 worker 选修。因此,两个表之间存在多对多关系。打破多对多,并创建一个名为 Takes 的新表,其中包含外键 W_ID 和 C_ID。
问题是:我想找出所有 worker 的名单以及他们最后修读的类(class)。例如,如果 W_ID=1 则采用 C_Date 20/01/2010、C_Date 25/10/2010 和 C_Date 20/12/2010。
那么需要的结果是:
W_ID C_Date
1 20/12/2010
2
3
4
编辑
我想找到每个 worker 完成的类(class)的最长日期,因为 worker 会完成许多类(class)。我是商科学生,所以我不能使用 INNER JOIN 命令。可以用 IN 代替吗?
我正在 Microsoft Access 中使用 SQL
最佳答案
SELECT w.w_id, MAX(c.c_date)
FROM worker w
LEFT JOIN
worker_course wc
ON wc.w_id = w.w_id
LEFT JOIN
course с
ON c.c_id = wc.c_id
GROUP BY
w.w_id
或者这个:
SELECT w.w_id, MAX(c.c_date)
FROM course с
JOIN worker_course wc
ON wc.c_id = c.c_id
RIGHT JOIN
worker w
ON w.w_id = wc.w_id
GROUP BY
w.w_id
关于sql - 每个 worker 的最大日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5820042/