2014-11-13 3 views
2

У меня есть две таблицыSQL выберите записи

--table a-- 
first second 
------ ------- 
user-1 user-2 
user-2 user-1 
user-2 user-3 

--table b-- 
ignoreby ignored 
-------- ------- 
user-1 user-2 
user-1 user-4 
user-3 user-4 

я хочу, чтобы выбрать записи из таблицы а, не игнорируя сам себе (в том числе однонаправленных записей) на столе б

Результат здесь будет: user-2 user-3

Запись пользователя-2 пользователя-1 не должна включаться в результат, потому что пользователь-1 игнорирует пользователя-2 , и это однонаправленный.

Благодаря

ответ

2

ли вы имеете в виду "двунаправленным", а не "в одном направлении"? Если это так:

select a.* 
from tablea a 
where not exists (select 1 
        from tableb b 
        where (b.ignoreby = a.first and b.ignored = a.second) or 
         (b.ignoreby = a.second and b.ignored = a.first) 
       ); 

Если вы действительно имеете в виду «однонаправленный», то вы использовали бы только первое условие.

+0

Большое вам спасибо. Я имел в виду двунаправленный, и вы решили мою проблему – user2683906

1

Возможно, вы можете попробовать другой и более простой подход. Подобно добавлению столбца с именем is_ignored с булевым значением в вашу первую таблицу (таблица a). Затем вы можете видеть непосредственно с помощью одного выбора, если пользователь проигнорировал другого пользователя.

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