質問
ページが表示されたときにデータを選択し、「ビュー」列を更新する必要があります。これを 1 つのクエリで行う方法はありますか、それともクエリを区別するために使用する必要がありますか?
解決
トランザクションを使用したくない、または使用する必要がない場合は、最初にビュー数を更新し、次に値を選択してユーザーに返すストアド プロシージャを作成できます。
他のヒント
これを 1 つのトランザクション内の 2 つのステートメントで行う必要があります
Begin Tran
Update Pages Set Views = Views + 1 Where ID = @ID
Select Columns From Pages Where ID = @ID
Commit Tran
SQL Serverを使用しているRDBMSをリストすると、出力ステートメントがあります
例
USE AdventureWorks;
GO
DECLARE @MyTestVar table (
OldScrapReasonID int NOT NULL,
NewScrapReasonID int NOT NULL,
WorkOrderID int NOT NULL,
ProductID int NOT NULL,
ProductName nvarchar(50)NOT NULL);
UPDATE Production.WorkOrder
SET ScrapReasonID = 4
OUTPUT DELETED.ScrapReasonID,
INSERTED.ScrapReasonID,
INSERTED.WorkOrderID,
INSERTED.ProductID,
p.Name
INTO @MyTestVar
FROM Production.WorkOrder AS wo
INNER JOIN Production.Product AS p
ON wo.ProductID = p.ProductID
AND wo.ScrapReasonID= 16
AND p.ProductID = 733;
SELECT OldScrapReasonID, NewScrapReasonID, WorkOrderID,
ProductID, ProductName
FROM @MyTestVar;
GO
PostgreSQLの アップデート ステートメントには、SELECT ステートメントのような結果セットを返す RETURNING 句があります。
UPDATE mytable
SET views = 5
WHERE id = 16
RETURNING id, views, othercolumn;
ただし、これが標準ではないことは確かです。他のデータベースがそれを実装しているかどうかはわかりません。
編集:あなたの質問に「MySQL」タグが含まれていることに今気づきました。おそらく質問自体でそれについて言及する必要があります。ただし、これは一般的なデータベースに関する良い質問です。他のデータベースでそれを行う方法を知りたいです。
私は Java でこのトリックを使用しました。SQL Server では、1 つの PreparedStatement で 2 つのコマンドを送信することもできます。
update tablex set y=z where a=b \r\n select a,b,y,z from tablex
ただし、これが期待どおりに機能するには、読み取りコミットされたトランザクション内にある必要があります。
所属していません StackOverflow