[英]Get Selected values in SQL
我想比較日期時間並刪除超過72小時的行。 然后,我想更新另一個表布爾“ HasClone”。 如何從第一個選擇中獲取整數(ID)? 參見下面的代碼:
SELECT Allocation_plan_details_Clone.Allocation_plan_id AS ID
FROM Allocation_plan_details_Clone
WHERE DATEDIFF(hour, start_date, GETDATE()) > 72
UPDATE Allocation_plan
SET HasClone = 0
WHERE allocation_plan_id = <INSERT CODE HERE!>
DELETE FROM Allocation_plan_details_Clone
WHERE DATEDIFF(hour, start_date, GETDATE()) > 72
所以在“在這里插入代碼!” 我想插入剛從Allocation_plan_details_Clone獲得的ID
如果我正確理解了您的問題,我想您想要的是:
UPDATE Allocation_plan
SET HasClone = 0
WHERE allocation_plan_id IN (
SELECT Allocation_plan_details_Clone.Allocation_plan_id
FROM Allocation_plan_details_Clone
WHERE DATEDIFF(hour, start_date, GETDATE()) > 72
)
這個答案是在刪除行的同時將Allocation_plan_id放入表變量中。
事務確保不更新Allocation_plan表就不會刪除數據。
我重寫了您的WHERE語句,以使其表現更好。
begin transaction t
DECLARE @deleted table(Allocation_plan_id int)
DELETE Allocation_plan_details_Clone
OUTPUT deleted.Allocation_plan_id
INTO @deleted
FROM Allocation_plan_details_Clone
WHERE start_date < dateadd(hour, -72, GETDATE())
UPDATE Allocation_plan
SET HasClone = 0
FROM Allocation_plan
JOIN
@deleted d
ON d.Allocation_plan_id = Allocation_plan.Allocation_plan_id
commit transaction t;
如果我理解正確,您可以制作一個臨時表(該表位於該數據庫連接上,並在刪除該連接后立即刪除自身)。
它會像這樣:
SELECT Allocation_plan_details_Clone.Allocation_plan_id AS ID INTO #temp_table
FROM Allocation_plan_details_Clone
WHERE DATEDIFF(hour, start_date, GETDATE()) > 72
UPDATE Allocation_plan
SET HasClone = 0
WHERE allocation_plan_id = <INSERT CODE HERE!>
DELETE FROM Allocation_plan_details_Clone
WHERE DATEDIFF(hour, start_date, GETDATE()) > 72
;
然后,您可以使用此臨時表執行任何操作,例如:
delete
from other_table
where id in (select id from #temp_table)
;
注意:不確定正在運行的DBMS,但是MSSQL具有引用臨時表的#標簽。 Postgres我認為您不需要這樣做,並且不確定其他DBMS。
您可以使用臨時表來保存所需的IDS,就像這樣
SELECT Allocation_plan_details_Clone.Allocation_plan_id AS ID
into #TempTable
FROM Allocation_plan_details_Clone
WHERE DATEDIFF(hour, start_date, GETDATE()) > 72
UPDATE a
SET HasClone = 0
WHERE allocation_plan_id in (select ID from #TempTable)
DELETE FROM Allocation_plan_details_Clone
WHERE DATEDIFF(hour, start_date, GETDATE()) > 72
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.