考虑两个表。 Worker表包含W_ID, W_Name
之类的字段。课程表包含C_ID, C_Name, C_Date
。
工人可以参加许多课程,许多工人可以参加课程。因此,两个表之间存在多对多的关系。打破多对多,并创建一个名为Takes的新表,其中包含外键W_ID和C_ID。
这是一个问题:我想找出所有工人的名单和他们最后的课程。例如,如果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
修改
我想找到每个工作人员完成的课程的最长日期,因为工人会做很多课程。我是商学院学生,所以我不能使用INNER JOIN命令。可以用IN代替吗?
我在Microsoft Access中使用我的SQL
答案 0 :(得分:3)
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
答案 1 :(得分:0)
select W_ID,C_ID,max(C_Date)
from(select W_ID,C_ID,C_Date
from worker
join takes using (W_ID)
join course using (C_ID)
)wc
group by W_ID,C_ID;