2014-11-13 4 views
0

Я ищу быстрый способ поиска в таблице, исключая результаты в соединении.Выберите исключить, если одна строка соответствует

Два simpelfied: рабочих таблиц

table 1 
- article_id 
- term_id 

table 2 
- article_id 
- loc_id 

В таблице 1 может быть несколько строк для одной и той же article_id, он может быть связан с несколькими условиями. Я ищу запрос на выбор, чтобы получить все результаты из таблицы 2, с loc_id 1, которые не имеют строки в таблице 1 с term_id 20.

Две таблицы объединены там article_ids ofc. !

Если я использую Normale присоединиться, а затем установить, где на term_id = 20, я до сих пор получить результаты, если статья связана с term_id 19.

ответ

0

Попробуйте это:

SELECT * 
FROM table2 
WHERE loc_id = 1 
AND atricle_id not in (SELECT article_id 
         FROM table1 
         WHERE term_id = 20) 
+0

Спасибо, но на этом пути я все еще получаю результаты, если есть несколько записей в таблице 1 с другим termids. –

+0

так что вы ожидаете? только одна строка? – SMA

+0

Мне нужно иметь записи из таблицы 2, которые не содержат term_id 20 в другой таблице. Поэтому, если есть совпадение по 20, оно должно игнорировать полную строку из таблицы 2. –

0

Попробуйте, как показано ниже

select * from table1 as t1 join table2 as t2 
on t1.article_id=t2.article_id 
where t2.loc_id = 1 and t1.term_id <> 20 
+0

Спасибо, но на этом пути я все еще получаю результаты, если в таблице 1 есть несколько записей с другими терминами. –

+0

Понял. Я думаю, Абхик все правильно. – anoop

0

Вы можете использовать not exists что-то как

select * from table2 t2 
where loc_id = 1 
and not exists 
(
    select 1 from table1 t1 
    where 
    t1.term_id = 20 
    and t1.article_id = t2.article_id 

) 

Вот demo, но с различным набором данными

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