하나의 쿼리로 테이블을 업데이트/선택할 수 있나요?
-
09-06-2019 - |
문제
페이지를 볼 때 데이터를 선택하고 '보기' 열을 업데이트해야 합니다. 하나의 쿼리에서 이 작업을 수행할 수 있는 방법이 있습니까, 아니면 별도의 쿼리에 사용해야 합니까?
해결책
트랜잭션을 사용하고 싶지 않거나 사용할 필요가 없는 경우 먼저 보기 수를 업데이트한 다음 값을 선택하여 사용자에게 반환하는 저장 프로시저를 만들 수 있습니다.
다른 팁
한 번의 트랜잭션에서 두 개의 문으로 이 작업을 수행해야 합니다.
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에서는 단일 ReadyStatement에서 두 개의 명령을 보낼 수도 있습니다.
update tablex set y=z where a=b \r\n select a,b,y,z from tablex
하지만 생각한 대로 작동하려면 커밋된 읽기 트랜잭션에 있어야 합니다.
제휴하지 않습니다 StackOverflow