【发布时间】:2019-09-19 19:22:29
【问题描述】:
图 1 表示 TABLE A 和 TABLE B 的当前状态。
当前的实现是将新的 MId 提取到表 B 并从基本进程复制 SqlQuery,以防出现新市场或现有市场。以下查询用于此:
SELECT A.MId, B1.Loop, B1.Segment, B1.SqlQuery, B1.UseDefault
FROM TableB B1 WITH (NOLOCK)
INNER JOIN TableA A WITH (NOLOCK) ON B1.MId IN (100, 200)
AND B1.MId = A.BaseMarket
AND ISNULL(A.POCId, 0) > 0
LEFT JOIN TableB B2 WITH (NOLOCK) ON A.MId = B2.MId
WHERE B2.MId IS NULL
图 2 显示了表 A 中的更新数据和表 B 的所需状态。所需的实现是:
- 如果是新市场(XYZ 市场 - 2001、2002),则将新的 MId 提取到表 B 并从基本进程复制 SqlQuery
- 如果表 B 中已存在市场配置(市场 ABC - 1001 和 1002),则复制现有配置的 SqlQuery。
这是表 A 和 B 的完整流程。两个表中的基本配置(100 和 200)最初是手动插入的,包括循环和段。
引入了一个新市场,并在表 A 中创建了一个新的 MId。假设市场 ABC 为 1001 和 1002。
在表 B 中为每个 MId 插入相应的记录,并从表 B 中的基本配置复制数据。插入的记录(SqlId - 3 和 4)
表 B 中的 SqlQuery 列因特定业务请求而手动更新。 (SqlId - 3 和 4)。因此,不同的查询。
Market ABC 在前端更新,这会在表 A 中创建两个新条目(MId - 1003 和 1004)。此外,还创建了新市场 XYZ(MId - 2001 和 2002)。
在表 B 中创建的相应条目应参考市场 XYZ(SqlId - 7 和 8)的基本配置,因为它是一个新市场,但应复制市场 ABC(MId - 1001 和 1002)的现有配置,因为它是配置已经存在。
如果单个查询可以使用 Case 语句实现此要求,我正在寻找建议。感谢您的帮助!
【问题讨论】:
-
所以你正在寻找
INSERT行从TableA到TableB,而他们还没有在TableB中,对吗?对于 TableB... Segment 来自哪里? SqlQuery 来自哪里? UseDefualt 来自哪里? -
图片并不是分享数据的好方法。 Why? 这里还需要解释一下输出的一些内容。您想要的输出中有一些行在示例数据中不存在。
-
我已对问题添加了更多解释,对于使用这些图像,我深表歉意。我只是认为图像中的颜色编码可以更好地理解问题。我的错!
标签: sql sql-server