【问题标题】:Why does my "INSERT INTO" Statement not work?为什么我的“INSERT INTO”语句不起作用?
【发布时间】:2019-05-14 19:33:38
【问题描述】:

我正在使用 Apache derbyDB (db2) 和 SQL Workbench 作为环境。我有 10k 条数据记录,我想创建一个包含维度表和事实表的星型模式。

dwh_price_paid_records = data table
dm_price_paid_records = data mart table (facts table)
dim_time =  data mart table (dimension)

DWH_PRICE_PAID_RECORDS.TRANSACTION_ID = VARCHAR(50)
DWH_PRICE_PAID_RECORDS.PRICE = INTEGER
DWH_PRICE_PAID_RECORDS.DATE_OF_TRANSFER = DATE
DIM_TIME.DATE_ID = Primary key of dim_time (autoincrement start with 1 increment by 1)
DM_PRICE_PAID_RECORDS.DATE_ID = Foreign key NOT NULL from DIM_TIME

在 Facts 表 (DM_PRICE_PAID_RECORDS) 中,我只想拥有主键、价格(事实)和 ID,以便与维度表建立关系,但它不起作用。

INSERT INTO DM_PRICE_PAID_RECORDS (TRANSACTION_ID, PRICE, DATE_ID) VALUES (SELECT TRANSACTION_ID FROM DWH_PRICE_PAID_RECORDS, SELECT PRICE FROM DWH_PRICE_PAID_RECORDS, SELECT DATE_ID FROM DIM_TIME join DWH_PRICE_PAID_RECORDS on DIM_TIME.DATE = DWH_PRICE_PAID_RECORDS.DATE_OF_TRANSFER WHERE DIM_TIME.DATE = 
DWH_PRICE_PAID_RECORDS.DATE_OF_TRANSFER);

我本来希望这是结果:

TRANSACTION_ID |价格 | DATE_ID

1|第2324章423

2 | 52315 | 234

但我收到一个德语错误,如下所示: "VALUES 子句必须至少有一个元素。不允许使用空元素"

“价值观-Klausel muss mindestens ein Element enthalten。Leere Elemente sind nicht zulässig。”

非常感谢! 翻拍

【问题讨论】:

  • 正如 Gordon 所说,这部分是你的语法。那里只能有一个 select 子句,它应该导致您想要放入表中的行 - 匹配所需的列数。
  • VALUES 子句的语法是(<column>[, per next column])[, per next row]。您的语句试图将多行放入一个单行元素中。

标签: sql derby


【解决方案1】:

我想你想要INSERT . . . SELECT:

INSERT INTO DM_PRICE_PAID_RECORDS (TRANSACTION_ID, PRICE, DATE_ID)
    SELECT ppr.TRANSACTION_ID, ppr.PRICE, t.DATE_ID
    FROM DWH_PRICE_PAID_RECORDS ppr JOIN
        DIM_TIME t 
        ON t.DATE = ppr.DATE_OF_TRANSFER ;

【讨论】:

  • 我爱你!非常感谢 :) 我花了这么多时间在这上面你不会相信我..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 2018-04-21
相关资源
最近更新 更多