簡體   English   中英

使用帶有更新語句的子查詢

[英]Use sub-query with update statement

我必須使用一些表達式更新基於 select top 2 語句的列的前 2 行。

update top(2) [Travel].[dbo].[HOTELS]
set [Travel].[dbo].[HOTELS].NAME = (select top(2) SUBSTRING(Name, 1, 5) + 'xxxxx' + SUBSTRING(Name, LEN(Name) - 2, LEN(Name)) AS column1
                                    from [Travel].[dbo].[HOTELS]                                    
                                   )

通過上面的查詢,我收到了這個錯誤

子查詢返回超過 1 個值。 當子查詢跟隨 =, ,=, <, <=, > 時,這是不允許的。 >= 或當子查詢用作表達式時。

我必須在 SQL 服務器和 Oracle 中使用它。

在 sql-server 中,您可以cte + select data first然后更新它。

 CREATE TABLE HOTELS ([NAME] varchar(14)); INSERT INTO HOTELS ([NAME]) VALUES ('ABCDEFG'), ('HIJKLMOP'); GO
 with cte as ( select top 2 NAME, SUBSTRING(Name, 1, 5) + 'xxxxx' + SUBSTRING(Name, LEN(Name) - 2, LEN(Name)) AS column1 from [HOTELS] ) update cte set NAME = column1; GO
  2 行受影響
select * from HOTELS;
  | 姓名 |  |:------------ |  |  ABCDExxxxxxEFG |  |  HIJKLxxxxx澳門幣 |

db<> 在這里擺弄


編輯 oracle 版本

CREATE TABLE Table1 ("NAME" varchar2(80));
  
 INSERT ALL INTO Table1 ("NAME") VALUES ('ABCDEFG') INTO Table1 ("NAME") VALUES ('HIJKLMOP') SELECT * FROM dual;
  2 行受影響
update Table1 set name = SUBSTR(Name, 1, 5) || 'xxxxx' || SUBSTR(Name, LENGTH(Name) - 2, LENGTH(Name)-1) where rownum <= 2
  2 行受影響
select * from Table1
  | 姓名 |  |:------------ |  |  ABCDExxxxxxEFG |  |  HIJKLxxxxx澳門幣 |

db<> 在這里擺弄

在您的子查詢中,您有前 2 個將限制更改為 1

update top 2  [Travel].[dbo].[HOTELS]
   set [Travel].[dbo].[HOTELS].NAME  = (
     select top 1  SUBSTRING(Name, 1, 5) + 'xxxxx' + SUBSTRING(Name, LEN(Name) - 2, LEN(Name)) AS column1
    from [Travel].[dbo].[HOTELS]
    where [Travel].[dbo].[HOTELS].id = 1415
  )

如果您不想要 where 條件,請不要使用它,例如:

  update top 2  [Travel].[dbo].[HOTELS]
set [Travel].[dbo].[HOTELS].NAME  = (
    select top 1  SUBSTRING(Name, 1, 5) + 'xxxxx' + SUBSTRING(Name, LEN(Name) - 2, LEN(Name)) AS column1
    from [Travel].[dbo].[HOTELS]

  )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM