基于多个表的多个表的Postgres/SQL计数
我有4个表,目标是根据给定的基于多个表的多个表的Postgres/SQL计数,sql,postgresql,Sql,Postgresql,我有4个表,目标是根据给定的User.uuid和Resource.uuid判断是否存在AccountLink或Resource链接的简单的真/假(或者更简单的计数) 最小工作示例 球门 基于不相关的User.uuid和Resource.uuid的正确/错误响应 模式 目前正在工作 提供id列表,而不是true/false,这可以在应用程序代码中处理,但查询本身效率也很低: 选择id 从“帐户链接” 其中user_id=(从“Users”中选择id,其中uuid=?) 和account_id=(
User.uuid
和Resource.uuid
判断是否存在AccountLink
或Resource链接
的简单的真/假(或者更简单的计数)
最小工作示例
球门
基于不相关的User.uuid
和Resource.uuid
的正确/错误响应
模式
目前正在工作
提供id
列表,而不是true/false,这可以在应用程序代码中处理,但查询本身效率也很低:
选择id
从“帐户链接”
其中user_id=(从“Users”中选择id,其中uuid=?)
和account_id=(从“资源”中选择account_id,其中uuid=?)
协会
选择id
来自“资源链接”
其中user_id=(从“Users”中选择id,其中uuid=?)
和resource_id=(从“Resources”中选择id,其中uuid=?)
有没有办法根据用户的
uuid
一次性找到正确的用户
和资源
,然后使用这些id
属性跨多个表计数?Hmmm。我想您需要一个交叉连接
,并引入附加信息:
选择
(存在(选择1)
来自“AccountLinks”al
其中al.user\u id=u.id,al.account\u id=r.account\u id
))就像你的accountlink一样,
(存在(选择1)
来自“资源链接”rl
其中rl.user_id=u.id,rl.resource_id=r.id
))就像你的资源链接一样
从“用户”到交叉连接
“资源”r
其中u.uuid=?而r.uuid=?
您提到了count和true/false,但您的查询返回了一个id列表。因此不确定您想要的结果是与资源.uuid相关的用户.uuid
?还是两个独立的输入?@JuanCarlosOropeza更新了我的问题,以澄清您错过了
上的左连接条件。另外,resource.uuid
似乎也有一个输入变量。我将研究交叉连接
。同时,uuid
对于User
和Resource
是不同的。我更新了我的问题,以便更清楚地反映这一点。
User
- id
- uuid
Resource
- id
- account_id
- uuid
AccountLink
- id
- account_id
- user_id
ResourceLink
- id
- resource_id
- user_id