Sql 选择满足所有连接图元条件的图元
我发现很难给这个问题加上一个合适的标题,但也许那是因为我不知道如何实现我的目标 我有以下数据库布局:Sql 选择满足所有连接图元条件的图元,sql,Sql,我发现很难给这个问题加上一个合适的标题,但也许那是因为我不知道如何实现我的目标 我有以下数据库布局: table: folders columns: folderId table: files columns: fileId, authorId table: file_relation columns: folderId, fileId table: authors columns: authorId, surname, firstName 我试图实现的是列出所有只包含作者XY(姓氏
table: folders
columns: folderId
table: files
columns: fileId, authorId
table: file_relation
columns: folderId, fileId
table: authors
columns: authorId, surname, firstName
我试图实现的是列出所有只包含作者XY(姓氏=X,名字=Y)文件的文件夹。我的方法是这样的:
SELECT f.folderId FROM `folders` f
INNER JOIN `file_relation` rel ON rel.folderId = f.folderId
INNER JOIN `files` fls ON fls.fileId = rel.fileId
INNER JOIN `authors` a ON a.authorId = fls.authorId
WHERE a.surname = X and a.firstName = Y;
SELECT f.folderId,
COUNT(fls.fileId) as filesCount,
SUM(a.surname = 'X' and a.firstName = 'Y') as authorFilesCount
FROM `folders` f
INNER JOIN `file_relation` rel ON rel.folderId = f.folderId
INNER JOIN `files` fls ON fls.fileId = rel.fileId
INNER JOIN `authors` a ON a.authorId = fls.authorId
GROUP BY f.folderId
HAVING filesCount = authorFilesCount;
现在,我列出了所有的文件夹,其中有来自上述作者的文件。但是,我现在如何限制它们仅在没有其他文件的情况下列出 最好使用聚合函数而不是子查询。查询将如下所示:
SELECT f.folderId FROM `folders` f
INNER JOIN `file_relation` rel ON rel.folderId = f.folderId
INNER JOIN `files` fls ON fls.fileId = rel.fileId
INNER JOIN `authors` a ON a.authorId = fls.authorId
WHERE a.surname = X and a.firstName = Y;
SELECT f.folderId,
COUNT(fls.fileId) as filesCount,
SUM(a.surname = 'X' and a.firstName = 'Y') as authorFilesCount
FROM `folders` f
INNER JOIN `file_relation` rel ON rel.folderId = f.folderId
INNER JOIN `files` fls ON fls.fileId = rel.fileId
INNER JOIN `authors` a ON a.authorId = fls.authorId
GROUP BY f.folderId
HAVING filesCount = authorFilesCount;
你可以使用where not exists你说的“没有其他文件”是什么意思?您想要的结果是作者有一个文件但不超过一个文件?谢谢,where not EXISTS工作了@亚历克斯·约翰逊:我要声明的是,在这个文件夹中没有其他文件不是由作者X Y创建的。