[英]Postgres / SQL count across multiple tables based on multiple tables
我有4个表,目标是根据给定的User.uuid
和Resource.uuid
是否存在AccountLink
或ResourceLink
一个简单的true / false(如果更简单,则进行计数)。
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 = ?)
有没有一种方法可以根据user
的uuid
一次找到正确的user
和resource
,然后使用这些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.