【问题标题】:Oracle SQL UPDATE SELECT with JOIN got errorOracle SQL UPDATE SELECT with JOIN 出错
【发布时间】:2019-10-08 12:38:28
【问题描述】:

这是我的 SQL 查询

UPDATE
(SELECT
    *
FROM
    web_fe_ipo_ipo_application   apps
    INNER JOIN web_fe_ipo_ipo_entry ipo ON apps.ipo_link_id = ipo.ipo_ref_number
WHERE
    ( ( apps.status = 0
        OR ( apps.status = 2
             AND apps.sub_status = 0
             AND ipo.enable_omnibus_account = 1 ) )
      AND ( apps.applied_qty BETWEEN 1 AND 10 )
      AND apps.ipo_link_id = '984'
      AND apps.latest = 1
      AND ipo.latest = 1
      AND apps.tranche_name = 'Public-1' )
ORDER BY
    ipo_random(50)
FETCH FIRST 5 ROWS ONLY) selection 
SET selection.initial_allot_qty = 5;

但是效果不好

我需要从表中选择随机数据,然后在执行此查询后更新我得到以下错误

Error at Command Line : 20 Column : 5
Error report -
SQL Error: ORA-01733: virtual column not allowed here
01733. 00000 -  "virtual column not allowed here"
*Cause:    
*Action:

【问题讨论】:

  • Oracle 在更新中使用联接不是很灵活。您可能需要考虑 merge
  • 我可以在使用merge随机选择行后更新它吗?
  • 。 .如果您的表有主键,那应该不是问题。
  • 如果你知道,请写一个答案;对我有很大帮助

标签: sql oracle join sql-update


【解决方案1】:

使用 MERGE 语句。

这是一个例子:

MERGE INTO workers e
USING data_works h -- You can use the SELECT statement as well.
ON (e.f_id= h.f_id)
WHEN MATCHED THEN
UPDATE SET e.address= h.address
WHEN NOT MATCHED THEN
INSERT (f_id, address)
VALUES (h.f_id, h.address);

这是您的代码。希望它会奏效。

    MERGE INTO web_fe_ipo_ipo_application apps
 USING (SELECT * FROM web_fe_ipo_ipo_entry  ipo ORDER BY
    ipo_random)
 ON(apps.ipo_link_id = ipo.ipo_ref_number)
  WHEN MATCHED THEN
  UPDATE SET apps.initial_allot_qty = 5
WHERE apps.status = 0
        OR(apps.status = 2
             AND apps.sub_status = 0
             AND ipo.enable_omnibus_account = 1) 
      AND apps.applied_qty BETWEEN 1 AND 10 
      AND apps.ipo_link_id = '984'
      AND apps.latest = 1
      AND ipo.latest = 1
      AND apps.tranche_name = 'Public-1'
      AND rownum <=5;

使用 MERGE 语句从一个或多个源中选择行,用于表或视图中的 INSERT 或 UPDATE 操作。

您可以指定条件来确定是否更新目标表或视图。

合并操作是组合多个操作的便捷方式。它还允许您避免多个 INSERT、UPDATE 和 DELETE DML 语句。

【讨论】:

  • 你能把答案和我的代码更相似吗,因为有ORDER BYINNER JOIN
  • 命令行错误:4 列:2 错误报告 - SQL 错误:ORA-00907:缺少右括号
  • 我对查询做了一些更改。你能再试一次吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 2021-06-14
  • 1970-01-01
相关资源
最近更新 更多