1

我对 MySql 语句有疑问。我有 2 张桌子,记录和培训。培训表包含所有课程的列表,记录表包含用户参加过的课程列表。训练表如下

在此处输入图像描述

记录表格式:

在此处输入图像描述

我想列出每个用户的未参加课程。例如:从上面的表结构中,用户277正在参加130,167,128 & 2。所以用户277的未参加课程是3,4,5,7,8,9,147,11,12。

如何编写 sql 语句以获得上述结果?请帮忙

4

3 回答 3

1

它是这样的

SELECT * FROM training t WHERE t.id NOT IN (select trainingId from record where UserId=277 && piId=1) && t.status=1 ORDER BY t.categoryId
于 2016-03-09T01:47:51.023 回答
-1

获取用户列表,将其与培训课程交叉连接,然后将其与用户完成的培训课程表左外连接。我们使用 WHERE 子句来检查最后一个表是否匹配。

未经测试,但像这样:-

SELECT sub_user.UserId, t.id
FROM 
(
    SELECT DISTINCT UserId from record
) sub_user
CROSS JOIN Training t
LEFT OUTER JOIN Record r
ON sub_user.UserId = r.UserId
AND r.trainingId = t.id
WHERE r.id IS NULL

如果您有一个用户表(您可能会这样做),那么您可以消除子查询并将其替换为该表。

于 2016-03-07T10:00:45.660 回答
-1
select id from training where id not in ( select trainingid from record where userid = yourid)
于 2016-03-07T09:58:40.177 回答