【问题标题】:Postgres reference subquery in case statement案例语句中的 Postgres 引用子查询
【发布时间】:2013-11-21 04:53:54
【问题描述】:

我正在尝试引用子查询以在 case 语句中使用该值。但是,在 SELECT 语句中我不能引用next_creation,因为它只是抱怨该列不存在。我曾考虑将整个查询包装在 CASE 语句中,但 CASE 语句需要我多次运行查询,这似乎很愚蠢。

我还尝试对子查询执行CROSS JOIN,但它抱怨无法在子查询中引用 tg。内核错误:错误:对表“tg”的 FROM 子句条目的引用无效提示:表“tg”有一个条目,但不能从这部分查询中引用它。

我也尝试使用WITH,但它基本上与 CROSS JOIN 具有相同的结果。所以我什至尝试附加两个 WITH 子句,第一个查询与主 OUTER 查询相同,所以第二个 with 可以使用这些值....我遇到了一些错误。

是否有任何方法可以引用子查询,例如将其粘贴在要使用的变量中,同时仍允许子查询利用外部查询中的 tg?

SELECT *, (
    SELECT
        tg2.created
    FROM tocom t
    LEFT JOIN tocom_g_assoc ON tocom_g_assoc.table_id = t.id AND tocom_g_assoc.tocom_g_id != tg.id
    LEFT JOIN tocom_g tg2 ON tg2.id = tocom_g_assoc.tocom_g_id
    WHERE t.id IN ( SELECT t_id FROM tocom_g_assoc WHERE tocom_g_assoc.tocom_g_id = tg.id )
        AND tg2.createdt > tg.created
        AND tg2.created IS NOT NULL
    ORDER BY tg2.created ASC
    LIMIT 1
) next_creation

/*
Here I want to do as CASE statement, but for argument sake,
a simple next_creation - tg.dissolved_at would do
*/

FROM wp p
LEFT JOIN tocom_g tg ON tg.id = p.tocom_g_id
WHERE tg.dissolved_at IS NOT NULL

【问题讨论】:

    标签: postgresql subquery cross-join


    【解决方案1】:

    我意识到了这个问题。

    所以我把它作为一个选择,返回子查询。然后我将整个事情包装在另一个选择中,并使用 from 语句进行查询。然后我可以对返回的值做任何我想做的事情。

    【讨论】:

      猜你喜欢
      • 2017-07-17
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多