【问题标题】:Oracle: Sql to update row of the same table based on value from another row of the same tableOracle:Sql根据同一表另一行的值更新同一表的行
【发布时间】:2017-06-09 05:53:09
【问题描述】:

对于满足以下条件的商品记录,我需要一个 sql 来将 price 列更新为 999:

  1. 两条记录的 ITEM 位置不应为空。
  2. 将价格更新为 999,其中 2 条记录之一的位置为空。
ID 位置 项目价格 1 空 101 0 2 123 101 0 3 空 102 0 4 空 102 0 5 124 103 0 6 空 103 0

输出表样本

ID 位置 项目价格 1 空 101 999 2 123 101 0 3 空 102 0 4 空 102 0 5 124 103 0 6 空 103 999

【问题讨论】:

  • 我已经发布了答案。 (不得不更新它,因为我两次混淆了位置和价格。)顺便说一句,你的实际问题是什么不清楚。如您所见,该声明相当直截了当。下次展示您的更新声明并告诉我们您遇到的问题。
  • 请发布您尝试过的查询/方法。不要发布我需要查询的内容。
  • 我使用了以下查询,但它只更新了第一个 id 记录为空的集合:UPDATE SAMPLE SAMP2 SET SAMP2.PRICE=999 WHERE SAMP2.ID IN (SELECT SAMP2.ID FROM SAMPLE SAMP1 JOIN SAMP1.ITEM=SAMP2.ITEM 上的 SAMPLE SAMP2,其中 SAMP1.SLOT_ID 不为空且 SAMP2.SLOT_ID 为空)

标签: sql oracle


【解决方案1】:

使用IN(或EXISTS)检查是否存在位置不为空的项目编号记录。

update items
set price = 999
where location is null
and item_id in (select item_id from items where location is not null);

【讨论】:

    【解决方案2】:

    我已经创建了一个表。请在下面找到查询。只需执行并检查。您应该按照您的要求得到想要的结果。

    CREATE TABLE TABLE1(ID INT, LOCATION INT, ITEM INT, PRICE INT)
    INSERT INTO TABLE1 VALUES
    (1, NULL, 101, 0), 
    (2, 123 , 101, 0), 
    (3, NULL, 102, 0), 
    (4, NULL, 102, 0), 
    (5, 124 , 103, 0), 
    (6, NULL, 103, 0);
    
    SELECT* FROM TABLE1;
    
    WITH CTE AS
    (
    SELECT ITEM, COUNT(*) AS COUNTLOC FROM TABLE1 WHERE LOCATION IS NULL GROUP BY ITEM
    )
    UPDATE TABLE1
    SET PRICE = 999 WHERE ITEM IN(SELECT ITEM FROM CTE WHERE COUNTLOC<2) AND LOCATION IS NULL;
    

    【讨论】:

      【解决方案3】:
      update TABLE1 t1
      INNER JOIN (select t12.item from TABLE1 t12 where t12.LOCATION is null
      GROUP BY t12.ITEM 
      HAVING count(t12.ITEM)=1)aaa on aaa.item = t1.ITEM
      set t1.PRICE = 999 where t1.LOCATION is null 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-02
        • 2022-01-10
        • 2018-12-11
        相关资源
        最近更新 更多