我有以下sql语句,我想更新select语句返回的行上的字段。这是我的选择吗?我尝试过的东西并没有给我预期的结果:
SELECT
Flows_Flows.FlowID,
Flows_Flows.Active,
Flows_Flows.BeatID,
Flows_Flows.FlowTitle,
Flows_Flows.FlowFileName,
Flows_Flows.FlowFilePath,
Flows_Users.UserName,
Flows_Users.DisplayName,
Flows_Users.ImageName,
Flows_Flows.Created,
SUM(CASE WHEN [Like] = 1 THEN 1 ELSE 0 END) AS Likes,
SUM(CASE WHEN [Dislike] = 1 THEN 1 ELSE 0 END) AS Dislikes
FROM Flows_Flows
INNER JOIN Flows_Users ON Flows_Users.UserID = Flows_Flows.UserID
LEFT JOIN Flows_Flows_Likes_Dislikes ON
Flows_Flows.FlowID=Flows_Flows_Likes_Dislikes.FlowID
WHERE Flows_Flows.Active = '1' AND Flows_Flows.Created < DATEADD(day, -60, GETDATE())
Group By Flows_Flows.FlowID, Flows_Flows.Active, Flows_Flows.BeatID,
Flows_Flows.FlowTitle, Flows_Flows.FlowFileName, Flows_Flows.FlowFilePath,
Flows_Users.UserName, Flows_Users.DisplayName, Flows_Users.ImageName,
Flows_Flows.Created
Having SUM(CASE WHEN [Like] = 1 THEN 1 ELSE 0 END) = '0' AND SUM(CASE WHEN [Dislike] = 1
THEN 1 ELSE 0 END) >= '0'
这个select语句完全返回我需要的内容,但我想将Active字段从1更改为0。
答案 0 :(得分:1)
是 - 一般结构可能是这样的:(注意你没有声明你的主键)
UPDATE mytable
set myCol = 1
where myPrimaryKey in (
select myPrimaryKey from mytable where interesting bits happen here )
答案 1 :(得分:0)
因为你没有在你想要达到的结果中更清楚地表达你的问题,我将根据自己的假设提供答案。
<强>假设强>
你有一个select语句,可以为你提供东西,它可以根据需要运行。你想要它做的是让它返回结果并动态更新那些选定的行 - 基本上就像说“找到X,告诉我关于X并使它成为Y”。
<强> Anwser 强>
如果我的假设是正确的,不幸的是我认为你没有办法做到这一点。 select不会改变表,它只能获取信息。同样,更新不会提供比更新行数更多的详细信息。
但是不要放弃,取决于你想要达到的结果,你有其他选择。
<强>替代强>
如果您只想更新已选择的行,则可以 只需编写一个UPDATE语句来执行此操作,并且@Randy已提供 这是一个很好的例子。
如果您想减少对服务器的调用,这意味着您想要正确使用 一次调用服务器并获取结果,以及更新 在行中,您可以编写存储过程来执行此操作。
存储过程就像您在编程语言中编写的函数一样。它本质上定义了一组sql操作并为它们命名。每次调用该存储过程时,都会使用提供的输入执行操作集(如果有)。
因此,如果您想了解有关商店程序的更多信息,请查看: http://www.mysqltutorial.org/introduction-to-sql-stored-procedures.aspx
答案 2 :(得分:0)
如果我理解正确你正在寻找一种语法,如果它是1,就能选择Active的值为0.这样的语法是
SELECT
Active= CASE WHEN Active=1 THEN 0 ELSE Active END
FROM
<Tables>
WHERE
<JOIN Conditions>