2017-04-03 5 views
1

私はSQLに慣れていないので、書くのはかなり難しい動作でクエリを実装したいと思います。異なる場合は選択しますか?

私の「ユーザー」テーブルは次のようになりますとPostGRE

id  |   email   | guest |   token    
-----------+---------------------------+-------+---------------------------------------------- 
6XH898SJ | [email protected]   | t  | test_token_1234 
L7DJ456MV | [email protected]   | f  | faQ2UJFRKZNtieFGub6D0XwhfA1QqLD6lwU5DmIzBaI= 
L2CN592JV | [email protected]  | f  | gspCpQSOtuxNpT8n+C1szL12/YKvBfygfpGLPLoBDws= 
5KX442FK | [email protected]   | f  | test_token_1234 

それは簡単です下で実行されます。

複数のゲストユーザーは、同じ電子メールで存在することができます。 登録されたユーザーは特定のメールに1人しか存在できませんが、同時にゲストと登録ユーザーを持つことができます。 トークンは電子メールのハッシュ以上のものではないため、第1ユーザーと第4ユーザーのトークンは同じです。

私の要求は、ゲストとゲスト以外のすべてのトークンを選択する必要があります。しかし、2つのトークンが同じ場合(つまり、同じ電子メールが2人のユーザーに使用されている場合)、WHEREゲストがfalseである行を取得する必要があります。

誰かが私を助けることができますか?

+0

フォーマットをあなたのテーブルを –

答えて

1

のPostgresでは、distinct onでこれを行うことができます。

select distinct on (token) u.* 
from user u 
order by token, guest desc; 
関連する問題