2017-03-24 63 views
0

我正在學習SQL,所以很容易!加入或連接

我有幾張桌子。它們之間的公共列是'user_id'列。表1有一個'user_name'列。我想從表1中的這一列中獲取所有用戶名,其中user_ID匹配並更新表2中名爲'domain_info'的列:('domain name \','user_name')。
「域名\」將文本字符串和 「USER_NAME」由表1

所有幫助是非常讚賞 乾杯

+1

這很酷。有問題嗎? – user2366842

+0

請參閱[如何發佈一個好問題](https://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)或至少閱讀[幫助頁面](https://stackoverflow.com/help/mcve),以便人們可以真正幫助你。 DDL和一些預期輸出的樣本數據對於所有問題都是非常有用的。乾杯。 – scsimon

回答

0

你或許應該update此列,因爲那時你將有每次在user表中更改user_name以保持其更新。這是有關依賴性和冗餘的Database normalization的重要概念之一。相反,堅持使用它們的關係來從表中查詢所需的數據。

select u.user_name, domain_info = d.domain_info+'\'+u.user_name 
from table_1 u 
    inner join table_2 d 
    on u.user_id = d.user_id 


更新語法是:

update d 
    set domain_info = d.domain_info+'\'+u.user_name 
from table_1 u 
    inner join table_2 d 
    on u.user_id = d.user_id 

如果其中任何一個空的,你可以在isnull()他們包裹或coalesce()像這樣:

update d 
    set domain_info = isnull(d.domain_info,'')+isnull('\'+u.user_name,'') 
from table_1 u 
    inner join table_2 d 
    on u.user_id = d.user_id 
+0

謝謝,但這只是選擇後顯示一個新的列。我想要更新第二個表,因爲其中的用戶不會更改... – Goozer16

+0

我試圖將現有用戶的域憑據批量加載到第二個表中。完成後,未來的任何更改都可由應用程序進行 – Goozer16

+0

@ Goozer16更新 – SqlZim

0

感謝SqlZim ..

我得到了它是這樣工作的:

UPDATE 表2 SET table2.domain_info = USER_NAME FROM表1 WHERE table1.user_id = table2.user_id;

UPDATE table2中 SET table2.domain_info = (SELECT {FN CONCAT( '域名\',domain_info)}) WHERE USER_ID = USER_ID;

我幾乎可以肯定,這有一個更好的語法......我沒有寫太多的TSQL。但它的工作!

再次感謝