簡體   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