2014-10-30 58 views
1

我想大量更新一個表列的值,但我需要查詢來檢查這個值是否已經存在。如果是,則在再次檢查並更新表格之前進行相關更改。更新/插入前檢查動態值的存在

數據庫主要擁有員工信息,我需要創建一個唯一的用戶名,該腳本來創建用戶名是:

select upper(LEFT(first_name,1))+LEFT(surname,3)+'1' 
from staff_test 

如果用於示例用戶將產生的ABit1username用戶Andrew Bithell。我需要做的是檢查STAFF_TEST表中是否已有ABit1username,如果是這樣,請將安卓用戶名更改爲ABit2,因爲在用戶名移至下一個用戶之前,用戶名必須是唯一的。

我已創建的另一個表,該表列出了所有當前用戶名分裂現有的用戶名到2列,因此他們在這個表作爲

column1 | column2 
------------------ 
ABit |1 

我有一個功能試驗顯示,現在我想一個合併聲明可能是要走的路。

歡迎任何建議。

回答

0

使用ROW_NUMBER可以一次生成所有的唯一名稱:

select 
    upper(LEFT(first_name,1))+LEFT(surname,3)+ 
     rtrim(row_number() over (partition by upper(LEFT(first_name,1))+LEFT(surname,3))) 
    ,first_name 
    ,surname 
from staff_test 
0

執行了前檢查,看看是否有任何衝突:

SELECT UPPER(LEFT(first_name, 1)) + LEFT(surname, 3) + '1' AS username , 
     COUNT(1) counter 
FROM staff_test 
GROUP BY UPPER(LEFT(first_name, 1)) + LEFT(surname, 3) + '1' 
HAVING COUNT(1) > 1 
ORDER BY COUNT(1) DESC 

這將返回爲您的員工每個用戶名錶,按用戶名分組,以及每次出現次數的計數。

如果這是您要做的事,您可以對數據進行清理,否則我會建議在最後附加Id列值或某個其他唯一值,而不是1