Сравните две таблицы и удалите общую строку сравнения с двумя столбцами - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть две таблицы Таблица A и Таблица B.

Таблица A имеет идентификатор пользователя и идентификатор_курса , а таблица B имеет идентификатор пользователя & 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

Мой код для таблицы A:

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 ) 

ВЫХОД:

ТАБЛИЦА ВЫХОДА

ВЫХОД ТАБЛИЦЫ B

Мне не нужна строка из таблицы B, которая имеет в таблице A сравнение с userid и courseid .

Я попробовал этот запрос, чтобы получить желаемый результат.Но он исключил всех пользователей (ИД пользователей) из таблицы А, что обычно в таблице В.

ВЫБЕРИТЕ ue.userid в качестве ИД пользователя, 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 в качестве co ONen.courseid = co.id оставил объединение mdl_user при включенном u ue.userid = u.id оставил объединение mdl_company_users как cu ON cu.userid = ue.userid оставил объединение mdl_company как company ON company.id = cu.companyid где co.id IN (1,2,3,4,5,6,7,8,9,10,11,12) И company.id = 1 И ue.userid NOT IN (ВЫБЕРИТЕ u.id ОТmdl_course_completions КАК ПРИСОЕДИНЯЕТСЯ mdl_course КАК ВКЛЮЧЕНО p.course = c.id ПРИСОЕДИНИТЕСЬ КАК ВКЛЮЧЕНО p.userid = u.id ГДЕ c.enablecompletion = 1 И p.course IN (1,2,3,4,5,6), 7,8,9,10,11,12))

Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Вы должны быть в состоянии сделать соединение, как это.

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

0 голосов
/ 08 февраля 2019

Другими словами, вы ищете таблицу, которая содержит строки таблицы A, где таблица A userid равна таблице B userid, а таблица A 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

Это должно работать

...