繁体   English   中英

Oracle数据库。 如何更新选定的列。

[英]Oracle database. How to update selected columns.

问题是:

我有两个表(列名放在方括号中):汽车(CarColorId,CarName),CarColor(CarColorId,CarColorName);

任务是使用字符串“ _updated”更新Cars.CarName,但前提是CarColor.CarColorName ='red'。 我知道想法如何不加入联接

我已经尝试过这种方式:

UPDATE Cars set CarName = concat (CarName, '_updated') WHERE CarColorId = 1;

CarColorId = 1 =红色; 该请求有效,但任务是使用两个表

您可以在Oracle中尝试任何一种

正常更新

UPDATE
      CARS
SET
      CARS.CARNAME =
          CONCAT ( CARS.CARNAME,
                 '_updated' )
WHERE
      EXISTS
          (SELECT
                CARCOLOR.CARCOLORID
           FROM
                CARCOLOR
           WHERE
                CARS.CARCOLORID = CARCOLOR.CARCOLORID
                AND CARCOLOR.CARCOLORNAME = 'RED');

使用内联视图(如果Oracle认为可更新)

注意 :如果遇到非键保留行错误,请添加索引以解决该错误,使其可更新

UPDATE
      (SELECT
            CARS.CARNAME AS OLD,
            CONCAT ( CARS.CARNAME,
                    '_updated' )
                AS NEW
       FROM
                CARS
            INNER JOIN
                CARCOLOR
            ON CARS.CARCOLORID = CARCOLOR.CARCOLORID
       WHERE
            CARCOLOR.CARCOLORNAME = 'RED') T
SET
      T.OLD     = T.NEW;

使用合并

MERGE INTO
      CARS
USING
      (SELECT
            CARS.ROWID AS RID
       FROM
                CARS
            INNER JOIN
                CARCOLOR
            ON CARS.CARCOLORID = CARCOLOR.CARCOLORID
       WHERE
            CARCOLOR.CARCOLORNAME = 'RED')
ON
      ( ROWID = RID )
WHEN MATCHED
THEN
    UPDATE SET CARS.CARNAME =
                 CONCAT ( CARS.CARNAME,
                        '_updated' );

您可以像这样修改查询:

UPDATE
  Cars
set
  CarName = concat (CarName, '_updated')
WHERE
  CarColorId in (
    select
      CarColorId
    from
      CarColor
    where
      CarColorName='red'
  )
;

我知道您说过,如果没有任何加入,您将不知道该如何做。 我不知道这是否意味着您希望避免联接,或者是否愿意使用联接。 如果是后者,请查看以下代码:

    UPDATE
    (
          SELECT c.CarName, cc.CarColorName
            FROM Cars c
      INNER JOIN CarColors cc
              ON c.CarColorId = cc.CarColorId
    ) CarsWithColor
    SET CarsWithColor.CarName = CarsWithColor.CarName || '_Updated' 
    WHERE CarsWithColor.CarColorName = 'red';

希望这也会有所帮助。

Ť

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM