0

我有以下 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。

4

3 回答 3

1

是的 - 一般结构可能是这样的:(注意你没有声明你的主键)

UPDATE mytable
set myCol = 1
where myPrimaryKey in (
select myPrimaryKey from mytable where interesting bits happen here )
于 2012-08-20T22:26:57.017 回答
0

因为你没有更清楚地说明你想要达到什么结果,所以我会用我自己的假设来提供答案。

假设

您有一个 select 语句可以为您提供东西,并且可以按需要工作。你想要它做的是让它返回结果并即时更新那些选定的行 - 基本上就像说“找到 X,告诉我关于 X 并使它成为 Y”。

安瑟

如果我的假设是正确的,不幸的是,我认为你没有任何办法可以做到这一点。选择不会改变表,它只能获取信息。同样,更新不会提供比更新的行数更多的详细信息。

但是不要放弃,根据你想要达到的结果,你还有其他选择。

备择方案

  1. 如果您只想更新您选择的行,您可以简单地编写一个 UPDATE 语句来执行此操作,@Randy 提供了一个很好的示例来说明如何编写。

  2. 如果您想减少对服务器的调用,这意味着您只想对服务器进行一次调用并获得结果,以及更新行,您可以编写存储过程来做到这一点。

存储过程就像您用编程语言编写的函数。它本质上定义了一组 sql 操作并给它们命名。每次调用该存储过程时,都会使用提供的输入(如果有)执行一组操作。

因此,如果您想了解有关存储过程的更多信息,可以查看: http ://www.mysqltutorial.org/introduction-to-sql-stored-procedures.aspx

于 2012-08-20T22:47:08.717 回答
0

如果我理解正确,您正在寻找一种语法,以便能够将 Active 的值选择为 0(如果它是 1)。类似的语法是

SELECT 
 Active= CASE WHEN Active=1 THEN 0 ELSE Active END
FROM
 <Tables>
WHERE
 <JOIN Conditions>
于 2012-08-20T22:53:32.177 回答