【问题标题】:ERROR: more than one row returned by a subquery used as an expression. POSTGRESQL / LOOKER错误:用作表达式的子查询返回多行。 POSTGRESQL / 查看器
【发布时间】:2019-05-29 19:57:33
【问题描述】:

我正在尝试在 Looker 中执行一个子查询,该查询从人员 ID 等于分配给人员 ID 的人员表中返回受让人姓名

我试图做一个限制 1,但这只是为每一行中的人返回第一个值

SELECT 
    "ID",

    (SELECT 
        p."NAME"
    FROM 
        view_321782990.person AS p, view_321782990.request AS r 
    WHERE 
        p."ID" = r."ASSIGNEDTOPERSON") 
FROM view_321782990.request

我希望它返回分配给票证的姓名,正在做

SELECT 
        p."NAME", r."ID"
    FROM 
        view_321782990.person AS p, view_321782990.request AS r 
    WHERE 
        p."ID" = r."ASSIGNEDTOPERSON"

返回我想要的,但是,由于查看器如何解释 SQL,我需要以这种方式执行子查询

【问题讨论】:

  • 听起来您需要使用连接而不是相关子查询。
  • 由于查看器格式化 sql 语句的方式,我必须使用子查询
  • 您尝试创建的 LookML 情况是什么导致了这种情况?解释您要解决的根本目标会很有帮助,因为可能有更好的方法来建模!
  • (SELECT string_agg(p."NAME", ',' from ...) 也许?

标签: sql postgresql looker scalar-subquery


【解决方案1】:

使用连接:

SELECT
  p.name
  , r.id
FROM view_321782990.person p
LEFT JOIN view_321782990.request r ON
  p.id = r.assignedtoperson

【讨论】:

  • 我会,但是由于查看器如何创建查询,我需要使用子查询。我需要 SELECT "ID" ... FROM view_321782990.request,除了 SELECT "ID" 和 FROM 之间的内容之外,不能更改任何内容
  • 使用您在问题中提供的信息,您不需要子查询。
  • 我知道它可以通过连接完成(并且应该完成),但我想知道它是否可以通过子查询完成,因为这是 Looker 格式化查询的方式看
【解决方案2】:

我认为您可以通过内部查询获得所需的内容,该内部查询由外部查询中的值过滤并将 LIMIT 放回:

SELECT 
    "ID",

    (SELECT 
        p."NAME"
    FROM 
        view_321782990.person AS p, view_321782990.request AS r 
    WHERE 
        p."ID" = r."ASSIGNEDTOPERSON" AND r."ID" = outer_r."ID"
    LIMIT 1
) 
FROM view_321782990.request AS outer_r

其中request."ID"是与p."ID" = r."ASSIGNEDTOPERSON"区分记录的一种方式,这种方式取决于这些表之间的关系,可能并非在所有情况下都可行,这让我想到:

我同意这一普遍共识,即这可以在连接中更轻松地完成。如果浏览器不存在,您可能需要在探索中添加连接,但是一旦视图之间存在连接,您就可以跨视图访问字段,如下所示:

view: request {
  # ... sql_table_name, etc ...
  dimension: person_name {
    sql: ${person.name}
  }
  # ... mode dimensions, measures, etc ...
}

如果您对生成的 sql 的外观有一个清晰的概念,我会在 how looker generates sql 上查看更多信息,在how joins are handled 上查看更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2013-05-24
    • 2021-12-23
    相关资源
    最近更新 更多