这可能是一个简单的答案,但过去几天我一直在研究这个问题,而且它开始让我感到沮丧
我有一个包含多对多关系的数据库
------------- --------------------- ------------------- |Images | |user2img | |User | ------------- --------------------- ------------------- |imgID | |id | |UserID | |imgURL | |imgID | |UserName | |imgAv | |UserID | |UserEmail | ------------- --------------------- -------------------
user2img表指示允许用户查看的图像。
我正在尝试确定一个SQL查询,它将列出每个图像(一次不重复)并告诉我指定的用户是否有权查看该图像。
输出如,
(WHERE UserID ='1')
---------------------------- |imgID | imgURL | access | ---------------------------- |1 | xxx | Yes | |2 | yyy | No | |3 | qqq | Yes | |4 | rrr | Yes | |5 | www | No | |6 | sss | Yes | etc... ----------------------------
谢谢,
答案 0 :(得分:0)
一种可能性是(我承认不是最好而且效率不高)为具有内部联接的用户选择所有匹配的图像而不是复合密钥表,而 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中看到结果。