2012-06-30 5 views
1

У меня есть таблица друзей с колонками user1 и user2 и таблица пользователей с полем входа.Альтернативы использованию SQL UNION в этом запросе?

Другую «пару» можно сохранить в любом случае, например user1 = Joe и user2 = Dave, или это может быть user1 = Dave и user2 = Joe, то же самое.

Я хочу найти всех друзей пользователя (скажем, «Джо»), которые вошли в систему за последние 30 дней (меня не интересует формат даты, просто хочу иметь возможность сделать это в 1 запрос).

Использует UNION единственное решение, имеет ли он лучшую производительность?

ответ

1

Союз не единственный вариант, вы можете, например, сделать так:

select u.user 
from users u 
inner join friends f on u.user = case f.user1 when 'Joe' then f.user2 else f.user1 end 
where f.user1 = 'Joe' or f.user2 = 'Joe' 

ли это быстрее, чем союз зависит от нескольких вещей, в основном на то, что показатели у вас есть.

+0

интересный вариант – MotoTribe

1

A UNION здесь не нужно. Просто выберите where user1='Joe' OR user2='Joe'

+0

Хотя, вероятно, вам также понадобится какой-то оператор case в select, чтобы вывести соответствующий столбец пользователя в качестве «друга». –

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