2013-07-09 90 views
0

我有一個包含電子郵件地址的表。我正在嘗試填寫DomainName列與來自電子郵件地址的域。 select語句自行工作正常。但是,當我將其添加到更新查詢時,我得到以下內容:使用select語句的SQL更新查詢

子查詢返回多個值。當子查詢遵循=,!=,<,<=,>,>=或當子查詢用作表達式時,這是不允許的。

我應該用什麼來代替=

update Table1 set Table1.DomainName= 
(select SUBSTRING(Table1.Email,(CHARINDEX('@',Table1.Email)+1),LEN(Table1.Email) - 
(CHARINDEX('@',Table1.Email))) as DomainName FROM Table1) 
+0

嘗試運行你的SELECT查詢,看看有多少結果它返回? –

+2

*** SQL ***只是*結構化查詢語言* - 許多數據庫系統使用的語言,但不是數據庫產品......很多東西都是特定於供應商的 - 所以我們真的需要知道什麼**數據庫系統**(以及您正在使用的版本)... –

+0

@marc_s Deja Vu重新開始! –

回答

3

只需刪除子查詢。

update Table1 
set Table1.DomainName= SUBSTRING(Table1.Email,(CHARINDEX('@',Table1.Email)+1),LEN(Table1.Email) - (CHARINDEX('@',Table1.Email))) 
FROM Table1 
+0

工作就像一個魅力,讓我感到愚蠢!謝謝格雷格先生和其他回答同樣問題的人。 –

+0

不要難過。你做了所有繁重的工作。只需要輕輕一點就能越過終點線。 –

2

取出SELECT聲明,它應該是這樣的:

update Table1 
set Table1.DomainName= SUBSTRING(Table1.Email, 
           (CHARINDEX('@', Table1.Email) + 1), 
           LEN(Table1.Email) - (CHARINDEX('@',Table1.Email)) 
1

只是刪除子查詢,這將工作:

update Table1 
set Table1.DomainName = SUBSTRING(Table1.Email, 
    (CHARINDEX('@',Table1.Email)+1), 
    LEN(Table1.Email) - (CHARINDEX('@',Table1.Email)))