繁体   English   中英

基于多个表的多个表的Postgres / SQL计数

[英]Postgres / SQL count across multiple tables based on multiple tables

我有4个表,目标是根据给定的User.uuidResource.uuid是否存在AccountLinkResourceLink一个简单的true / false(如果更简单,则进行计数)。

最小的工作实例

http://sqlfiddle.com/#!17/09144/1

目标

基于不相关的User.uuidResource.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 = ?)

有没有一种方法可以根据useruuid一次找到正确的userresource ,然后使用这些id属性在多个表之间进行计数?

嗯。 我认为您希望cross join其他信息:

select 
  (exists (select 1
     from "AccountLinks" al
     where al.user_id = u.id and al.account_id = r.account_id
  )) as has_accountlink,
  (exists (select 1
     from "ResourceLinks" rl
     where rl.user_id = u.id and rl.resource_id = r.id
  )) as has_resourcelink
from "Users" u cross join
     "Resources" r 
where u.uuid = ? and r.uuid = ?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM