Правильный способ использования UNION ALL или DISTINCT или NOT IN - PullRequest
0 голосов
/ 21 октября 2018

Полагаю, здесь я не использую лучший подход.Моя цель - получить уникальные записи из двух отдельных таблиц, т. Е. Table2016 и table2015

SELECT GROUP_CONCAT(coursecode) FROM table2016 WHERE regno = 'ABC/XY/DEF/12/155' AND (ca_score + exam_score) <= 39
UNION DISTINCT
SELECT GROUP_CONCAT(coursecode) FROM table2015 WHERE regno = 'ABC/XY/DEF/155' AND (ca_score + exam_score) <= 39

Вот что я получаю:

GROUP_CONCAT(coursecode)
========================
EDM305,EDU313,EDU498
EDM305,EDU313,EDU497

У меня все еще есть повторяющиеся записи.

В качестве альтернативы, я попробовал вариант NOT IN, но безрезультатно, я знаю, что я близок

SELECT GROUP_CONCAT(coursecode) FROM table2016 WHERE regno = 'ABC/XY/DEF/12/155' AND (ca_score + exam_score) <= 39
NOT IN
(SELECT GROUP_CONCAT(coursecode) FROM table2015 WHERE regno = 'ABC/XY/DEF/155' AND (ca_score + exam_score) <= 39)

Я мог бы использовать некоторые направляющие.

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Попробуйте ниже:

select DISTINCT(subTable.column)
form (
    SELECT GROUP_CONCAT(coursecode) FROM table2016 WHERE regno = 'ABC/XY/DEF/12/155' AND (ca_score + exam_score) <= 39

    UNION DISTINCT

    SELECT GROUP_CONCAT(coursecode) FROM table2015 WHERE regno = 'ABC/XY/DEF/155' AND (ca_score + exam_score) <= 39
) as subTable
0 голосов
/ 21 октября 2018

Вы можете использовать подзапрос, чтобы объединить строки из двух таблиц и затем объединить их:

SELECT GROUP_CONCAT(coursecode)
FROM (
    SELECT coursecode FROM table2016
    WHERE regno = 'ABC/XY/DEF/12/155' AND (ca_score + exam_score) <= 39
    UNION 
    SELECT coursecode FROM table2015 
    WHERE regno = 'ABC/XY/DEF/155' AND (ca_score + exam_score) <= 39
   ) s
WHERE coursecode NOT IN (SELECT coursecode 
                         FROM table2017
                         WHERE regno = 'ABC/XY/DEF/155' 
                           AND (ca_score + exam_score) >= 40);
...