0

私は3つのテーブルを持っています:

  • 場所
  • ユーザー
  • User_Likes_Place

Places には、場所に関する情報 (id、住所、番号、名前、bla bla) があります。 Users には、ユーザーに関する情報 (id、name、age、bla bla) があります。 User_Likes_Place は、Places と Users の間の関係であり、id、id_place、id_user の 3 つの列があります。 .

すべての場所のリストが必要であり、ユーザーが好きな場所も知る必要があります。すべての場所を選択するクエリを実行しようとしており、その場所が特定のユーザーから気に入られているかどうかを示す列を追加するため、クエリでは user.id でフィルタリングします。

結果は次のようになります。

place.id, place.name, place.address, place...., USER_LIKES_THIS_PLACE
001, name001, addr001, blabla, 1 (or Y/N, I don't know..)
002, name002, addr002, blabla, 0
003, name003, addr003, blabla, 0
004, name004, addr004, blabla, 1
005, name005, addr005, blabla, 1

何か提案はありますか?皆さん、ありがとうございました。

4

1 に答える 1

1

これを行う 1 つの方法を次に示します。

select p.*,
       (case when ulp.id_user is not null then 'Y' else 'N' end) as UserLikesPlace
from places p left outer join
     user_like_places ulp
     on p.id = ulp.id_place and
        ulp.id_user = @IDUSER;

に重複がないことを前提としていuser_like_placesます。それが可能であれば、重複を削除するにはdistinctまたはが必要です。group by

left outer join、すべての場所に関するすべての情報を保持します。次に、関連付けテーブルに結合します。一致する場合ulp.id_userは null ではなく、ユーザーはその場所を気に入っています。それ以外の場合は、そうでNULLあり、ユーザーはそうしません。0 または 1 だけが必要な場合は、caseステートメントを に置き換えることができますulp.id_user is not null

于 2013-08-25T12:18:12.707 に答える