我的任务是更新数据库中的多个条目。
两个表需要通过一个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
语句。不过,我似乎什么都粘不住。
我发现的潜在重复答案似乎没有考虑到来自两个单独表的两个条件。
答案 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;
祝你好运!