目前,我们正在与import pandas as pd
df1 = pd.read_excel('SnapshotID_Old.xlsx')
df2 = pd.read_excel('SnapshotID_New.xlsx')
difference = df1[df1.ne(df2)]
print difference
合并:
esqlProductTarget
而不是与整个MERGE esqlProductTarget T
USING esqlProductSource S
ON (S.ProductID = T.ProductID)
WHEN MATCHED
THEN UPDATE
SET T.Name = S.Name,
T.ProductNumber = S.ProductNumber,
T.Color = S.Color
WHEN NOT MATCHED BY TARGET
THEN INSERT (ProductID, Name, ProductNumber, Color)
VALUES (S.ProductID, S.Name, S.ProductNumber, S.Color)
WHEN NOT MATCHED BY SOURCE
THEN DELETE;
目标数据集合并,我们可以合并这样的子集:
esqlProductTarget
是否可以合并目标上的记录子集?
答案 0 :(得分:1)
你当然可以这样做。您可以使用CTE作为MERGE的来源或目标。
WITH ePT AS
(
SELECT
*
FROM
esqlProductTarget
WHERE productid > 1000
)
MERGE ePT AS T
USING esqlProductSource AS S
ON (S.ProductID = T.ProductID)
WHEN MATCHED
THEN UPDATE
SET T.Name = S.Name,
T.ProductNumber = S.ProductNumber,
T.Color = S.Color
WHEN NOT MATCHED BY TARGET
THEN INSERT (ProductID, Name, ProductNumber, Color)
VALUES (S.ProductID, S.Name, S.ProductNumber, S.Color)
WHEN NOT MATCHED BY SOURCE
THEN DELETE;
现在,当然,如果您尝试在少于1000的productID中使用MERGE,那么您将遇到麻烦,但如果您对数据充满信心,那么SQL将让您按照自己的意愿行事。
答案 1 :(得分:0)
根据文件(https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql)
target_table是数据行所针对的表或视图 基于匹配。 target_table是任何插入,更新或删除操作的目标 由MERGE声明的WHEN条款规定。
因此,如果您不想对表进行合并,则必须创建一个视图来表示您的子集。但这可能不会提供任何类型的性能优势,所以如果您关心的是性能,那么您可能只是坚持与表合并或分成单独的更新和插入语句。