如何检查是否存在关系 - 多对多的关系

时间:2011-09-30 13:58:53

标签: mysql relationship

我需要你的帮助来弄清楚如何进行查询。 我的想法是建立一个奖励用户的信用系统。 管理员输入信用描述(例如,用户订阅了时事通讯,他发布了至少10条评论......)。 我有3张桌子:

  • 用户(ID和名称),
  • 奖励(身份和说明),
  • rewards_users(id_reward,id_user)。

我会提取一个摘要html表,其行由用户名和Y或N组成,具体取决于用户和奖励之间是否存在关系。

2 个答案:

答案 0 :(得分:2)

使用以下查询显示特定用户的所有奖励

SELECT r.description, CASE WHEN ru.user_id IS NULL THEN 'N' ELSE 'Y' END awarded
FROM rewards r
LEFT JOIN rewards_users ru ON r.reward_id=ru.reward_id AND ru.user_id = 1

并将其用作子查询以获取用户详细信息

e.g:

SELECT u.user_id, u.user_name, ua.award, ua.awarded
FROM users u,
     (
     SELECT r.description, CASE WHEN ru.user_id IS NULL THEN 'N' ELSE 'Y' END awarded
     FROM rewards r
     LEFT JOIN rewards_users ru ON r.reward_id=ru.reward_id AND ru.user_id = u.user_id
     ) ua
WHERE u.userid=1

注意:未经测试。

答案 1 :(得分:1)

听起来像你需要在users表和rewards_users表之间进行LEFT JOIN然后处理null rewards_id的实例:

select u.id as users_id,
u.name as users_name,
case when ur.rewards_id is null then 'N' else 'Y' end as hasRewards
from users u left join users_rewards ur
on u.id = ur.users_id;