加入查询以获取不匹配的记录
Join query for getting non matching records
我对 MySql 声明有疑问。我有 2 tables,记录和培训。培训 table 包含所有课程的列表,记录 table 包含用户参加的课程列表。训练 table 低于
记录table格式:
我想获取每个用户未参加课程的列表。例如:从上面的 table 结构中,用户 277 正在参加 130,167,128 & 2。因此用户 277 的未参加课程为 3,4,5,7,8,9,147,11,12。
如何编写 sql 语句以获得上述结果?请帮助
select id from training where id not in ( select trainingid from record where userid = yourid)
获取用户列表,将其与培训课程交叉连接,然后将其左连接到用户完成的 table 培训课程。我们使用 WHERE 子句检查最后一个 table.
是否匹配
未经测试,但类似这样:-
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
如果您有 table 个用户(您可能有),那么您可以删除子查询并将其替换为 table。
是这样的
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
我对 MySql 声明有疑问。我有 2 tables,记录和培训。培训 table 包含所有课程的列表,记录 table 包含用户参加的课程列表。训练 table 低于
记录table格式:
我想获取每个用户未参加课程的列表。例如:从上面的 table 结构中,用户 277 正在参加 130,167,128 & 2。因此用户 277 的未参加课程为 3,4,5,7,8,9,147,11,12。
如何编写 sql 语句以获得上述结果?请帮助
select id from training where id not in ( select trainingid from record where userid = yourid)
获取用户列表,将其与培训课程交叉连接,然后将其左连接到用户完成的 table 培训课程。我们使用 WHERE 子句检查最后一个 table.
是否匹配未经测试,但类似这样:-
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
如果您有 table 个用户(您可能有),那么您可以删除子查询并将其替换为 table。
是这样的
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