我将其作为传统,似乎无法在T-SQL ...(?)中解决。
我需要将表A的一列映射到表B的另一列,此映射是使用参数化表完成的。所有3个表都在同一应用程序的同一服务器中。临时表是一个中间表,用于接收外部数据,然后它将在映射后将最终表馈入干净。
Table_a(临时表)
ID NAME rack object
-----------------------------
1 x y zz:zz1
2 x y zz:zz2
table_b(干净表-映射之前)
ID Name rack object
--------------------------
230 x y null
245 x y null
我想在映射后实现下一个table_b。
Table_b(干净表-映射后的最终表)
ID Name rack object
---------------------------
230 x y 10
245 x y 11
如果同一名称/机架的ID不同,如何关联两个表。例如,表A的名称/机架的ID为1,分别为x和y。表B的相同情况在ID 230下。
table_parametrization
Id nameObject
---------------
10 zz:zz1
11 zz:zz2
object
中的列table_a
是nvarchar
类型,而object
中的列table_b
是int
类型。
我什至不知道如何在T-SQL中实现它。
答案 0 :(得分:1)
我在这里做出一些疯狂的假设,但我将带您逐步了解。
如果table_a
和table_b
之间的连接不牢固,并且可能有重复的(name,rack)
对,则您可能希望一次进行一次更新。
首先,将登台表的内容放入临时表中。在此过程中,我们将要从临时表中删除行,因此您可能不想直接使用table_a
执行此操作。有了这些信息后,我们将使用WHILE
循环遍历记录,并一次更新table_b
一条记录。
DECLARE @A_ID INT
WHILE EXISTS (SELECT TOP 1 1 FROM #table_a)
BEGIN
--Get one ID value at a time
SELECT TOP 1 @A_ID = id
FROM #table_a
--the CTE gets the first record from table_b that needs an [object] value set
;WITH Top1B AS
(
SELECT TOP 1 b.id, objectId = p.id
FROM #table_b b
INNER JOIN #table_a a ON a.[name] = b.[name] AND a.rack = b.rack
INNER JOIN #table_param p ON p.nameObject = a.object
WHERE a.id = @A_ID
AND b.object IS NULL
)
UPDATE b
SET b.[object] = tb.objectId
FROM Top1B tb
INNER JOIN #table_b b ON b.id = tb.id
--remove the record from the staging table
DELETE #table_a
WHERE id = @A_ID
END
答案 1 :(得分:0)
假设您的qs1 = views.some_model.objects.filter(start_gt=some_date_var).order_by('start')
qs2 = views.some_model.objects.all()
qs1.union(qs2)
属性是table_b.ID
,并且是自动生成的,则需要使用对象将IDENTITY
JOIN
到table_a
。您将使用类似以下内容的值插入table_parameterization
中:
B