1

列 user1 と user2 を持つ friends テーブルと、ログイン フィールドを持つ users テーブルがあります。

フレンドの「ペア」は、どちらの方法でも保存できます。たとえば、user1=Joe と user2=Dave のようにすることも、user1=Dave と user2=Joe のようにすることもできます。

過去 30 日以内にログインしたユーザー ("Joe" など) のすべての友達を検索したい (日付形式は気にしません。1 つのクエリで実行できるようにしたいだけです)。

UNION を使用するのが唯一の解決策ですが、最高のパフォーマンスが得られますか?

4

2 に答える 2

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'

それがユニオンよりも速いかどうかは、いくつかのことに依存します。主に、あなたが持っているインデックスに依存します。

于 2012-06-30T23:25:38.137 に答える
1

ここではAUNIONは必要ありません。選択するだけwhere user1='Joe' OR user2='Joe'

于 2012-06-30T23:22:44.020 に答える