2012-06-26 2 views
0

У меня есть таблица A с поля user1 и user2 и таблица B с парами user3 и user4.Найти всех пользователей в таблице A, которые также приведены в таблице B

Я хочу, чтобы иметь возможность найти какие-либо строки из таблицы A, где сочетание user1/user2 также в таблице В.

Порядок не имеет значения. Например, таблица A с user1 = Mike, user2 = Joe будет соответствовать таблице B с user3 = Joe и user4 = Mike.

ответ

1
select a.user1, a.user2 from a, b 
where (a.user1 == b.user3 and a.user2 == b.user4) 
or (a.user1 = b.user4 and a.user2 = b.user3); 
+1

См. Http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx - вы должны прекратить использовать этот унаследованный метод просто разделяя запятую список таблиц. Используйте ** собственно ** ANSI JOINs вместо этого! –

4

Я бы, наверное, просто использовать явный or в объединении:

select user1, user2 
     from tableA join tableB on 
      (user1=user3 and user2=user4) or 
      (user1=user4 and user2=user3) 

... но взять его с зерном соли. Меня обвиняли в чрезмерном использовании объединений, возможно, по крайней мере с небольшой долей.

+0

wow, оба представлены в то же время, слишком плохо. SO также не показывает # секунд .-) Я заберу другой, потому что это более простая ваниль и потому что у Джеймса гораздо меньше очков ;-) Спасибо пучок для быстрого ответа! – MotoTribe

+1

Если вы наведите указатель мыши на «answer xx minutes ago», он покажет точное время каждого представления. Он был на 11 секунд впереди меня. –

+0

awesome, спасибо! – MotoTribe

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