Могу ли я обновить / выбрать из таблицы в одном запросе? - PullRequest
2 голосов
/ 04 сентября 2008

Мне нужно выбирать данные при просмотре страницы и обновлять столбец «Представления». Есть ли способ сделать это в одном запросе, или мне нужно использовать для отдельных запросов?

Ответы [ 5 ]

2 голосов
/ 04 сентября 2008

Если вы не хотите / не хотите использовать транзакцию, вы можете создать хранимую процедуру, которая сначала обновляет счетчик просмотров, а затем выбирает значения и возвращает их пользователю.

2 голосов
/ 04 сентября 2008

Вы должны сделать это в двух операциях в одной транзакции

Begin Tran

Update Pages Set Views = Views + 1 Where ID = @ID
Select Columns From Pages Where ID = @ID

Commit Tran
1 голос
/ 04 сентября 2008

Было бы полезно, если бы вы перечислили используемую СУБД В SQL Server есть оператор OUTPUT

Пример

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
0 голосов
/ 06 апреля 2009

Я использовал этот трюк с Java, и SQL Server также позволит вам отправлять две команды в одном PreparedStatement.

update tablex set y=z where a=b \r\n select a,b,y,z from tablex

Это должно быть в транзакции чтения, чтобы работать так, как вы думаете.

0 голосов
/ 04 сентября 2008

Оператор PostgreSQL UPDATE содержит предложение RETURNING, которое будет возвращать результирующий набор как оператор SELECT:

UPDATE mytable
 SET views = 5
 WHERE id = 16
 RETURNING id, views, othercolumn;

Я почти уверен, что это не стандартно. Я не знаю, реализуют ли это какие-либо другие базы данных.

Edit: я только что заметил, что ваш вопрос имеет тег "MySQL". Может быть, вы должны упомянуть об этом в самом вопросе. Это хороший общий вопрос о базе данных - я хотел бы посмотреть, как это сделать в других базах данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...