1

这可能是一个简单的答案,但在过去的几天里,我一直在解决这个问题,它开始让我发疯

我有一个具有多对多关系的数据库

------------- --------- ---------------- ---
|图片 | |user2img | |用户 |
------------- --------- ---------------- ---
|imgID | |标识 | |用户名 |
|imgURL | |imgID | |用户名 |
|imgAv | |用户名 | |用户邮箱 |
------------- --------- ---------------- ---

user2img 表指示允许用户查看哪个图像。

我正在尝试确定一个 SQL 查询,它将列出每个图像(一次不重复)并告诉我指定的用户是否有权查看该图像。

所以像这样的输出,

(其中用户 ID = '1')

----------------------------
|imgID | 网址 | 访问 |
----------------------------
|1 | xxx | 是 |
|2 | 年年 | 没有 |
|3 | QQ | 是 |
|4 | rrr | 是 |
|5 | 万维网 | 没有 |
|6 | sss | 是 |
 ETC...
----------------------------

谢谢,

4

1 回答 1

0

一种可能性是(我承认不是最好的,也可能不是很有效)为在复合键表上进行内部连接的用户选择所有匹配的图像,并将结果与​​否定选择联合起来(iid 是我的测试表中的 imageId):

select 
    iid, url, 'yes'
    from user_has_image
    inner join image on user_has_image.iid = image.id
    inner join user on user_has_image.uid = user.id
    where user.id = 1
union
select 
    iid, url, 'no'
    from user_has_image
    inner join image on user_has_image.iid = image.id
    inner join user on user_has_image.uid = user.id
    where user.id <> 1

您可以在此SQLFiddle 会话中看到结果。

于 2013-10-28T23:22:50.733 回答