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にします」と言うようなものです。

Anwser

私の仮定が正しければ、残念ながら、それを行う方法はないと思います。selectはテーブルを変更せず、情報をフェッチすることしかできません。同様に、更新では、更新された行数よりも詳細な情報は提供されません。

しかし、まだあきらめないでください。達成したい結果に応じて、選択肢があります。

代替案

  1. 選択した行を更新したいだけの場合は、UPDATEステートメントを記述してそれを行うことができます。@ Randyは、その記述方法の良い例を提供しています。

  2. サーバーへの呼び出しを減らしたい場合、つまりサーバーへの呼び出しを1回だけ行って結果を取得したい場合、および行を更新したい場合は、それを行うためのストアード・プロシージャーを作成できます。

ストアドプロシージャは、プログラミング言語で記述した関数のようなものです。これは基本的に一連のSQL操作を定義し、それらに名前を付けます。そのストアドプロシージャを呼び出すたびに、提供された入力(存在する場合)を使用して一連の操作が実行されます。

したがって、ストアドプロシージャについて詳しく知りたい場合は、 http ://www.mysqltutorial.org/introduction-to-sql-stored-procedures.aspxを参照してください。

于 2012-08-20T22:47:08.717 に答える
0

私が正しく理解していれば、Activeの値が1の場合に0になるように選択できる構文を探しています。そのようなものの構文は次のとおりです。

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