这可能是一个简单的答案,但是在过去的几天里,我一直在努力解决这个问题,而且它开始使我陷入困境
我有一个与多对多关系的数据库
------------- --------------------- ---------------- ---
|图像| | user2img | |用户|
------------- --------------------- ---------------- ---
| imgID | | id | |用户标识|
| imgURL | | imgID | |用户名|
| imgAv | |用户标识| |用户电子邮件|
------------- --------------------- ---------------- ---
user2img表指示允许用户查看的图像。
我正在尝试确定一个SQL查询,该查询将列出每个图像(一次不重复),并告诉我指定的用户是否有权查看该图像。
所以输出像
(WHERE UserID ='1')
----------------------------
| imgID | imgURL |访问|
----------------------------
| 1 | xxx |是的
| 2 | yyy |没有
| 3 | qqq |是的
| 4 | rrr |是的
| 5 | www |没有
| 6 | sss |是的
等等...
----------------------------
谢谢,
最佳答案
一种可能性是(我可能不是最好的,也不是很有效)为组合键表上进行内部联接的用户选择所有匹配的图像,而对结果进行否定的选择则选择UNION(在测试表中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 session中查看结果。