【发布时间】:2019-05-28 16:42:07
【问题描述】:
我有 4 个表,目标是一个简单的真/假(或者如果更容易计数)是否存在基于给定的 User.uuid 和 Resource.uuid 的 AccountLink 或 ResourceLink。
最小的工作示例
http://sqlfiddle.com/#!17/09144/1
目标
基于User.uuid 和Resource.uuid 的正确/错误响应,它们不相关。
架构
User
- id
- uuid
Resource
- id
- account_id
- uuid
AccountLink
- id
- account_id
- user_id
ResourceLink
- id
- resource_id
- user_id
目前工作中
给出id列表而不是true/false,可以在应用程序代码中处理,但是查询本身也是低效的:
SELECT id
FROM "AccountLinks"
WHERE user_id = (SELECT id FROM "Users" WHERE uuid = ?)
AND account_id = (SELECT account_id FROM "Resources" WHERE uuid = ?)
UNION
SELECT id
FROM "ResourceLinks"
WHERE user_id = (SELECT id FROM "Users" WHERE uuid = ?)
AND resource_id = (SELECT id FROM "Resources" WHERE uuid = ?)
有没有办法根据uuid 找到正确的user 和resource 一次,然后使用这些id 属性对多个表进行计数?
【问题讨论】:
-
您提到了计数和真/假,但您的查询返回了一个 id 列表。所以不确定你想要什么结果
-
user.uuid是否与resource.uuid相关?还是两个分开的输入? -
@JuanCarlosOropeza 更新了我的问题以澄清
标签: sql postgresql