2016-12-14 3 views
1

У меня есть две таблицы, как показано ниже:Как фильтровать записи с помощью двух таблиц

Таблица 1

id name enrollno subjectname batchname groupname 
1 abc  a1   s1   b1   g1 
2 xyz  a2   s1   b2   g1 

Таблица 2

sid subjectname batchname groupname 
1 s1   b1   g1 
2 s2   b2   g1 

Я хочу, чтобы получить записи из Table 1 которые не соответствуют никаким записям в TABLE 2, как показано ниже

name groupname batchname subjectname 
xyz  g1   b2   s1 

Благодаря

ответ

2

Использование NOT EXISTS

SELECT * 
FROM table1 t1 
WHERE NOT EXISTS(SELECT 1 
        FROM table2 t2 
        WHERE t2.subjectname = t1.subjectname 
         AND t2.batchname = t1.batchname 
         AND t2.groupname = t1.groupname); 
0

Вы можете использовать LEFT JOIN здесь:

SELECT t1.name, 
     t1.groupname, 
     t1.batchname, 
     t1.subjectname 
FROM table1 t1 
LEFT JOIN table2 t2 
    ON t1.subjectname = t2.subjectname AND 
     t1.batchname = t2.batchname AND 
     t1.groupname = t2.groupname 
WHERE t2.subjectname IS NULL 

Это может иметь преимущество в скорости, если объединить столбцы в table2 были настройки индексов ,

Смежные вопросы