基于单独的表条件的SQL更新列

时间:2018-07-27 21:10:12

标签: sql sql-server tsql

我的任务是更新数据库中的多个条目。

两个表需要通过一个ID进行连接。一个是帐户表,另一个是地区表。

我在“帐户”表中有一个TerritoryID,根据该条目的DisplayName,必须使用该地区的ID更新该条目。

帐户表

AccountId
TerritoryId <<我需要填充它。

领土表
ID
显示名称

我有一个带有AccountId和DisplayName的电子表格。我需要一个查询,该查询将使用另一个表(基于DisplayName)中另一个条件的值来更新基于一个条件(accountId)的一个表。

我一直在尝试类似的事情:

UPDATE 
 [dbo].[Account] 
SET 
 TerritoryId = [dbo].[Territories].Id 
FROM Accounts ON WHERE AccountId = '6477026' SELECT Id FROM Territories WHERE DisplayName LIKE '%partialDisplayName'

我还试图在其中集成CASE语句。不过,我似乎什么都粘不住。 我发现的潜在重复答案似乎没有考虑到来自两个单独表的两个条件。

1 个答案:

答案 0 :(得分:2)

以下是对您的问题的捏造。您的桌子...

create table #account (
  accountId int not null primary key
, territoryID int null
)

create table #territory (
  territoryId int not null primary key
, displayName varchar(20)
)

一些样本数据...

insert into #territory values (1, 'Hell');
insert into #territory values (2, 'heaven');
insert into #territory values (3, 'purgatory');

insert into #account values (1, 0)
insert into #account values (2, 0)
insert into #account values (3, 0)
insert into #account values (4, 0)
insert into #account values (5, 0)
insert into #account values (6, 0)
insert into #account values (7, 0)
insert into #account values (8, 0)
  

我有一个带有AccountId和DisplayName的电子表格。我需要查询   它将根据一个条件(accountId)使用一个条件更新一个表   值基于另一个表中的另一个条件(基于   显示名称)。

选项1::在excel中,制作更新语句,将这些语句从Excel复制到查询编辑器,然后运行它们。查询如下所示:

UPDATE #account
SET territoryID = (SELECT territoryId FROM #territory WHERE displayName = '<name>')
WHERE accountID = <id>

选项2::您可以将电子表格的内容导入Excel(很多方法,Google是您的朋友)。

--Create table to store the temp data
CREATE TABLE #excel_stuff (accountId int, displayName varchar(20));

--Created insert statements for the data from the spreadsheet. Running
--the inserts.
insert into #excel_stuff values (1, 'heaven')
insert into #excel_stuff values (2, 'heaven')
insert into #excel_stuff values (3, 'hell')
insert into #excel_stuff values (4, 'heaven')
insert into #excel_stuff values (5, 'heaven')
insert into #excel_stuff values (6, 'purgatory')
insert into #excel_stuff values (7, 'purgatory')
insert into #excel_stuff values (8, 'hell')

此时,您的Excel数据在数据库中。现在,我将更新#account表中的regionId值:

UPDATE #account
SET territoryID = (
SELECT t.territoryID
FROM #excel_stuff ex INNER JOIN #territory t
ON ex.displayName = t.displayName
WHERE ex.accountId = #account.accountId
)

DROP TABLE #excel_stuff;

祝你好运!