基于特定条件的SQL查询
图1表示表A和表B的当前状态 当前的实现是在新市场或现有市场的情况下,将新MID提取到表B并从基本流程复制SqlQuery。以下查询用于此操作:基于特定条件的SQL查询,sql,sql-server,Sql,Sql Server,图1表示表A和表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)
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中所需的状态。所需的实现将是:
我正在寻找一个建议,如果一个单一的查询可以实现这个要求使用案例语句。我会感谢你的帮助 我猜市场配置已经存在你实际上是指
市场名称
和类型
的组合。这就是问题所在
SELECT
A.NewId, B.Loop, B.Segment, B.SqlQuery, B.UseDefault
FROM (
SELECT
A1.MId AS NewId, A2.MId AS RefId
FROM
TableA A1
INNER JOIN
TableA A2
ON
(A1.MarketName = A2.MarketName AND A1.Type = A2.Type) -- use your market configuration logic here
OR
A1.BaseMarket = A2.BaseMarket
WHERE
A1.Mid NOT IN (SELECT MId FROM TableB)
) As A
INNER JOIN
TableB B
ON (A.RefId = B.MID)
首先,我们在这里自连接TableA
以获取参考MId作为RefId
。然后,我们将新的派生表与TableB
连接起来
希望这有帮助。谢谢大家! 因此,您正在从
TableA
将行插入TableB
中,而这些行不在TableB
中,对吗?对于表B。。。这个片段来自哪里?SqlQuery从何而来?UsedFault从何而来?图像并不是共享数据的好方法。这里还需要解释一些输出。您所需的输出中有一些行在示例数据中不存在。我已经为这个问题添加了更多解释,对于使用这些图像,我深表歉意。我只是认为图像中的颜色编码可以更好地理解这个问题。我的错!