sql - 从内部返回值存在没有连接的子查询
问题描述
我有以下查询
SELECT * FROM collection
WHERE id = 1 AND (
privacy = 0
OR (privacy = 1 AND
EXISTS (SELECT * FROM collection_member WHERE collection_id = collection.id AND member_id = 1)
)
)
这工作正常。但是我也想输出结果SELECT * FROM collection_member WHERE collection_id = collection.id AND member_id = 1
。在不使用连接的情况下实现这一目标的最有效方法是什么?(编辑:可能是子查询封装?)
解决方案
这是一个将子选择作为列放入的版本。
这仍然是一个连接,但也许它更接近你所追求的。
SELECT C.* ,
(SELECT MAX(M.MyColumn)
FROM collection_member M
WHERE collection_id = C.id
AND M.member_id = 1
) MyColumn
FROM collection C
WHERE C.id = 1
AND (
C.privacy = 0
OR (privacy = 1 AND
EXISTS (
SELECT * FROM collection_member CM
WHERE CM.collection_id = C.id AND CM.member_id = 1)
)
)
实际上,与执行 in the from 相比,这种方法的唯一好处JOIN
是,它更容易确保您不会加入多对多和重复计算。
上面显示的查询MAX
用于确保只返回一行。这可能是也可能不是您想要的行。
推荐阅读
- xcode - 文件选择上的 iCloud Drive 不起作用
- java-11 - Java11 中 AuthCacheValue 和 AuthCacheImpl 的替代方案是什么
- flutter - 如何在flutter中实现搜索listview
- javascript - 在 TypeScript 映射中使用默认参数理解 HOF
- javascript - React 渲染元素无效,而导入和导出似乎没问题
- kubernetes - Spring 批处理工作程序 pod 仅安排 2 个工作程序节点
- postgresql - Docker 撰写将 ECONNREFUSED 127.0.0.1:3333 与 AdonisJS、Postgres 连接
- bash - Bash:使用 printf 在动态终端宽度的任一侧填充中心和彩色文本
- javascript - 从不同的父级中删除类
- python-3.x - PythonPDF: FileNotFoundError: [WinError 2] 系统找不到指定的文件