【问题标题】:Multi level SQL join多级 SQL 连接
【发布时间】:2021-05-24 09:07:19
【问题描述】:

我有 3 个不同的表名,分别是 state、config 和 user

state: columns
--------------
taskid
class
state
queue time
running time

config: columns
---------------
class
confname

user: columns
-------------
username
userid

我可以使用 class 列加入 stateconfig 表,但在我的结果集中,我也想添加用户名,但没有匹配的列要加入。但是我可以通过包含另一个与state 表有关系的表tasks 来做到这一点。

tasks: columns
--------------
taskid,
userid,
taskname

使用此表,我想生成如下所示的输出列。

username - from users table
confname - from config table
state, queue time, running time - from the state table

我尝试了以下查询,但结果为零。有人可以帮助我更好的逻辑吗?

select
p.username,
c.confname,
s.state,
s.queue_time/1000000 ||' sec' as queue_time,
s.exec_time/1000000 ||' sec' as execution_time
from
    state as s join
    config c on s.class=c.class
     join ((select distinct(userid)as user from taks q join  state s on q.taskid=s.taskid) j
      join 
     user p on j.user=p.username)

【问题讨论】:

  • 创建db-fiddle 将鼓励每个人回答。这将有助于尝试 SQL。
  • 如果您在加载数据后创建多对多表...无法使用查询(或查询)来填充它

标签: sql postgresql join


【解决方案1】:

您的查询有语法错误。 joins 比 ons 多。

你正在描述这样的事情:

from state s join
     config c
     on s.class = c.class left join
     task t
     on j.taskid = s.taskid left join 
     user u
     on t.user = u.username

当然,如果没有匹配的任务或用户,那么这些列将为空。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 2016-08-28
    • 2022-11-17
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多