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

时间:2014-01-03 14:30:28

标签: sql oracle

问题是:

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

任务是使用字符串“_updated”更新Cars.CarName,但仅限于CarColor.CarColorName ='red'。我知道如何在没有连接的情况下执行此操作

我试过这种方式:

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

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

3 个答案:

答案 0 :(得分:2)

您可以在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' );

答案 1 :(得分:1)

您可以像这样修改您的查询:

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

答案 2 :(得分:0)

我知道你说你不知道如何在没有任何联接的情况下这样做。我不知道这是否意味着您更愿意避免加入,或者如果可以的话,您是否愿意使用它们。如果是后者,那么请查看这段代码:

    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';

希望这也有帮助。

Ť