【问题标题】:INSERT INTO using multiple WITH clausesINSERT INTO 使用多个 WITH 子句
【发布时间】:2023-01-11 17:55:42
【问题描述】:

我想用触发器插入记录。并从不同的表中插入多个值,因此我使用多个 CTE 来保存它们的值。

触发函数的基本结构是这样的:

WITH prop1 AS (
 ...
), prop2 AS (
 ...
), prop3 As (
 ...
)
INSERT INTO table (..)
VALUES (prop1.attribute,prop2.attribute,prop3.attribute);

但这不起作用。

“prop1.attribute”属性获取导致失败。

我怎样才能使这项工作?

【问题讨论】:

  • 那么,您需要以某种方式加入 CTE。你有身份证或其他什么吗?
  • 道具现在有完整的行。他们每个人都需要几个属性。
  • CTE 之间有何关联?恐怕你需要以某种方式加入他们
  • 有些 CTE 是相关的,有些则不相关。
  • minimal reproducible example 会让这更清楚。

标签: sql postgresql


【解决方案1】:

您需要从您的 CTE 中进行选择,并以某种逻辑在它们之间进行连接。我将在下面的示例中使用 CROSS JOIN,它将每个 CTE 的每一行与其他两个中的每一行相乘

WITH prop1 AS (
 ...
), prop2 AS (
 ...
), prop3 As (
 ...
)
INSERT INTO table (..)
SELECT prop1.attribute,prop2.attribute,prop3.attribute
FROM prop1 
CROSS JOIN prop2
CROSS JOIN prop3

最好用 INNER 替换 CROSS JOIN:

FROM prop1 
INNER JOIN prop2 ON prop2.someId = prop1.someId
INNER JOIN prop3 ON prop3.someId = prop1.someId

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-02
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2016-06-09
    • 2013-08-02
    相关资源
    最近更新 更多