比较两个表,并删除同一行比较两个列

问题描述 投票:1回答:2

我有两个表A和B表

表A具有用户ID和COURSE_ID和表B具有用户ID&courseid。

我想要一个表,而所有这一切都在表B.不应该含有在表B.任何记录记录

对于如。

如果表A有:

userid: 224 courseid: 6
userid: 224 courseid: 7
userid: 224 courseid: 8

如果表B有:

userid: 224 courseid: 6
userid: 224 courseid: 7

然后,在新表应具有:

userid: 224 courseid: 8

我对表格的代码:

SELECT ue.userid                            AS userid, 
       Concat(u.firstname, ' ', u.lastname) AS user, 
       en.courseid                          AS course_Id, 
       co.fullname                          AS Course_Name, 
       cu.companyid                         AS companyId, 
       company.name 
FROM   `mdl_user_enrolments` AS ue 
       LEFT JOIN `mdl_enrol` AS en 
              ON ue.enrolid = en.id 
       LEFT JOIN `mdl_course` AS co 
              ON en.courseid = co.id 
       LEFT JOIN `mdl_user` AS u 
              ON ue.userid = u.id 
       LEFT JOIN `mdl_company_users` AS cu 
              ON cu.userid = ue.userid 
       LEFT JOIN `mdl_company` AS company 
              ON company.id = cu.companyid 
WHERE  co.id IN ( 1, 2, 3, 4, 
                  5, 6, 7, 8, 
                  9, 10, 11, 12 ) 
       AND company.id = 1 

表B:

SELECT u.id, 
       p.course 
FROM   mdl_course_completions AS p 
       JOIN mdl_course AS c 
         ON p.course = c.id 
       JOIN mdl_user AS u 
         ON p.userid = u.id 
WHERE  c.enablecompletion = 1 
       AND p.course IN ( 1, 2, 3, 4, 
                         5, 6, 7, 8, 
                         9, 10, 11, 12 ) 

OUTPUT:

TABLE A OUTPUT

TABLE B OUTPUT

我不想从表B中的任何行,其具有表A与用户ID和courseid比较。

我想这个查询得到我想要的输出。但是它不包括表A中的所有用户(用户ID),其是常见于表B.

SELECT ue.userid如用户ID,CONCAT(u.firstname,””,u.lastname)作为用户,如en.courseid COURSE_ID,co.fullname如COURSE_NAME,cu.companyid如companyId,company.name FROM mdl_user_enrolments作为UE左连接mdl_enrol为EN ON ue.enrolid = en.id左加入mdl_course作为共同ON en.courseid = co.id左加入mdl_user作为U ON ue.userid = u.id左加入mdl_company_users如铜ON cu.userid = ue.userid左加入mdl_company作为公司ON company.id = cu.companyid其中co.id IN(1,2,3,4,5,6,7,8,9,10,11,12)AND company.id = 1 AND ue.userid NOT IN(SELECT u.id FROM mdl_course_completions为p mdl_course JOIN为C ON p.course = c.id JOIN mdl_user AS U ON p.userid = u.id WHERE c.enablecompletion = 1 AND p.course IN( 1,2,3,4,5,6,7,8,9,10,11,12))

谢谢。

mysql moodle
2个回答
0
投票

换句话说,你正在寻找一个包含表A的行,其中表用户ID等于表B中的用户ID和桌子的courseid不同的表B中courseid,让您的查询将是一个表:

SELECT a.userid, a.courseid FROM a, b WHERE (a.userid = b.userid AND a.courseid != b.courseid) OR a.userid != b.userid

这应该工作


0
投票

你应该能够做到像这样的加入。

SELECT  a.userid, a.courseid
FROM TABLE a
LEFT JOIN TABLE b
ON a.userid = b.userid and a.courseid = b.courseid)x
WHERE b.userid IS NULL

此图总是帮助enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.