加入查询以获取不匹配的记录

时间:2016-03-07 09:55:54

标签: mysql join sql-query-store

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

之下

enter image description here

记录表格式:

enter image description here

我想获得每个用户的列表非参加课程。例如:从上表结构中,用户277正在参加130,167,128&因此,用户277的非参加课程是3,4,5,7,8,9,147,11,12。

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

3 个答案:

答案 0 :(得分:0)

它是这样的

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

答案 1 :(得分:-1)

select id from training where id not in ( select trainingid from record where userid = yourid)

答案 2 :(得分:-1)

获取用户列表,将其与培训课程交叉加入,然后将LEFT OUTER JOIN加入到用户完成的培训课程表中。我们使用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

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