0

我有 3 张桌子:

  • 地方
  • 用户
  • User_Likes_Place

Places 包含关于地点的信息(id、address、number、name、bla bla) Users 包含关于用户的信息(id、name、age、bla bla) User_Likes_Place 是 Places 和 Users 之间的关系,有 3 列:id、id_place、id_user .

我需要所有地方的列表,我还需要知道用户喜欢哪些地方。我正在尝试进行查询以选择所有地点,添加一列指示该地点是否受到特定用户的喜爱,因此在查询中我将按 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

这是执行此操作的一种方法:

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。如果这是可能的,那么您需要一个distinctorgroup by来删除重复项。

left outer join保留有关所有地方的所有信息。然后它加入关联表。如果有匹配项,则不ulp.id_user为空且用户喜欢该地点。否则,它是NULL,而用户不是。如果您只需要 0 或 1,则可以将case语句替换为ulp.id_user is not null.

于 2013-08-25T12:18:12.707 回答