PostgreSQL 数据库
Table User
-----------
ID | Name
1 | John
2 | Bob
3 | Sarah
Table Photo
-------------
ID | Caption
1 | Vacation
2 | Birthday
3 | Christmas
Table Comment
--------------
ID | User ID | Photo ID| Text
1 | 1 | 1 | Mexico Looks Great
2 | 2 | 1 | Sure Does
3 | 3 | 1 | Too Hot
4 | 1 | 2 | Look at that cake
5 | 3 | 2 | No ice cream?
6 | 1 | 3 | So Happy
愿望:我想获得只有 John(1) 和 Sara(3) 评论过的所有照片。
我如何构建一个 SQL 查询来查找只有用户 #1 和用户 #3 的评论的照片,我想排除比这两个评论更多(或更少)的结果。
最佳答案
最清晰和最易读的方式是包含以下评论的照片
:
User1 相交
User2 Except
任何其他用户
这SQL Fiddle查询将返回:
SELECT *
FROM Photo
WHERE ID IN (
SELECT "Photo ID" FROM Comment WHERE "User ID" = 1
INTERSECT
SELECT "Photo ID" FROM Comment WHERE "User ID" = 3
EXCEPT
SELECT "Photo ID" FROM Comment WHERE "User ID" NOT IN (1, 3)
)
关于sql - Postgres多对多映射sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23922850/