我有一个具有内部联接的更新查询。我希望这个查询由于连接而返回两列,但似乎QUERY只占用第一行并使用它来更新数据而忽略其余的。
这是我的更新命令
UPDATE [mamd]
SET [Brand_EL] = IIF(CHARINDEX('ELECT', UPPER([mml].[Brand_Desc])) > 0, 'YES', [Brand_EL])
FROM [mamd] [m]
INNER JOIN [ior] [ir] ON [ir].[CLIENT_CUSTOMER_ID] = [m].[CustomerId] COLLATE Latin1_General_CI_AS
INNER JOIN [maslist] [mml] ON [mml].[Model] = [ir].[MODEL] COLLATE Latin1_General_CI_AS
如果我选择这样的
SELECT [ir].[CLIENT_CUSTOMER_ID], IIF(CHARINDEX('ELECT', UPPER([mml].[Brand_Desc])) > 0, 'YES', [Brand_EL])
FROM [mamd] [m]
INNER JOIN [ior] [ir] ON [ir].[CLIENT_CUSTOMER_ID] = [m].[CustomerId] COLLATE Latin1_General_CI_AS
INNER JOIN [maslist] [mml] ON [mml].[Model] = [ir].[MODEL] COLLATE Latin1_General_CI_AS
我收到以下数据
CLIENT_CUSTOMER_ID | Brand_EL
-------------------+----------
980872 | NO
980872 | YES
我认为它只拍了一张唱片的原因是因为
可能导致此问题的一件事是[mamd]
不包含同一用户的多条记录;这是一个独特的领域。由于它是一个唯一的字段,因此只有一行,这是否意味着它只运行一次连接?如果是这样的话,我是否有更好的方法可以在没有嵌套选择的情况下生成结果?
嘿所有人,
就像更新一样,我接受了Gordons Advice并使用聚合。在我的这个例子中,我只关心价值是"是'因为我只需要知道客户是否购买了特定产品。所以我最终做的是按客户ID分组并使用MAX功能。如果客户购买了产品,"是"会冒泡到顶端。如果他没有,它将保持为NO或NULL。在那种情况下,这并不重要。
答案 0 :(得分:4)
行为是正确的并且有记录,但不是很清楚:
指定FROM子句以提供条件时要小心 用于更新操作。 UPDATE语句的结果是 如果语句包含不是的FROM子句,则为undefined 以这样的方式指定,每个只有一个值可用 更新的列出现,即UPDATE语句是否 不确定。例如,在UPDATE语句中 在下面的脚本中,Table1中的两行都符合该资格 UPDATE语句中的FROM子句;但它未定义哪一行 来自Table1用于更新表2中的行。
这是试图说明一行仅由update
更新一次。使用哪个值是不确定的。因此,如果您需要决定如何处理多个匹配项。