获取SQL中的选定值
我想比较datetimes并删除超过72小时的行。然后我想更新另一个布尔表“HasClone”。如何将第一个选择中的整数(ID)输入到另一个选择中?见下面的代码:获取SQL中的选定值,sql,sql-server,azure-sql-database,Sql,Sql Server,Azure Sql Database,我想比较datetimes并删除超过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
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
选择分配计划详细信息克隆。分配计划id作为id
从分配\u计划\u详细信息\u克隆
其中DATEDIFF(小时,开始日期,GETDATE())>72
更新分配计划
设置HasClone=0
其中分配计划id=
从分配中删除\u计划\u详细信息\u克隆
其中DATEDIFF(小时,开始日期,GETDATE())>72
因此,在“在此处插入代码!”中,我想插入我刚从分配\u计划\u详细信息\u克隆中获得的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
)
如果我没弄错你的问题,我想你想要的是:
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
)
如果我没弄错你的问题,我想你想要的是:
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
)
如果我没弄错你的问题,我想你想要的是:
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
)
如果我没弄错的话,您可以创建一个临时表(位于该数据库连接上),并在断开连接后立即删除它本身 事情会是这样的:
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
;
注意:不确定您正在运行的DBMS,但是MSSQL有一个指向临时表的标签。Postgres我认为您不需要这样做,也不确定其他DBMS。如果我理解正确,您可以创建一个临时表(驻留在该数据库连接上,并在断开连接后立即删除) 事情会是这样的:
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
;
注意:不确定您正在运行的DBMS,但是MSSQL有一个指向临时表的标签。Postgres我认为您不需要这样做,也不确定其他DBMS。如果我理解正确,您可以创建一个临时表(驻留在该数据库连接上,并在断开连接后立即删除) 事情会是这样的:
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
;
注意:不确定您正在运行的DBMS,但是MSSQL有一个指向临时表的标签。Postgres我认为您不需要这样做,也不确定其他DBMS。如果我理解正确,您可以创建一个临时表(驻留在该数据库连接上,并在断开连接后立即删除) 事情会是这样的:
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
;
注意:不确定您正在运行的DBMS,但是MSSQL有一个指向临时表的标签。Postgres我认为您不需要这样做,也不确定其他DBMS。您可以使用临时表来保存所需的ID,如下所示
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
您可以使用temp table来保存所需的ID,如下所示
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
您可以使用temp table来保存所需的ID,如下所示
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
您可以使用temp table来保存所需的ID,如下所示
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
这个答案是在删除行的同时将分配计划id放入表变量中 该事务确保在不更新分配计划表的情况下不会删除数据 我重写了你的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;
开始事务t
声明@deleted table(分配计划id int)
删除分配\u计划\u详细信息\u克隆
输出已删除。分配\计划\ id
进入@deleted
从分配\u计划\u详细信息\u克隆
其中开始日期<日期添加(小时,-72,GETDATE())
更新分配计划
设置HasClone=0
从分配计划
参加
@删除d
在d.Allocation\u plan\u id=Allocation\u plan.Allocation\u plan\u id上
提交事务t;
此答案是在删除行的同时将分配计划id放入表变量中
该事务确保在不更新分配计划表的情况下不会删除数据
我重写了你的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;
开始事务t
声明@deleted table(分配计划id int)
删除分配\u计划\u详细信息\u克隆
输出已删除。分配\计划\ id
进入@deleted
从分配\u计划\u详细信息\u克隆
其中开始日期<日期添加(小时,-72,GETDATE())
更新分配计划
设置HasClone=0
从分配计划
参加
@删除d
在d.Allocation\u plan\u id=Allocation\u plan.Allocation\u plan\u id上
提交事务t;
此答案是在删除行的同时将分配计划id放入表变量中
该事务确保在不更新分配计划表的情况下不会删除数据
我重写了你的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;
开始事务t
声明@deleted table(分配计划id int)
删除分配\u计划\u详细信息\u克隆
输出已删除。分配\计划\ id
进入@deleted
从分配\u计划\u详细信息\u克隆
其中开始日期<日期添加(小时,-72,GETDATE())
更新分配计划
设置HasClone=0
从分配计划
参加
@删除d
在d.Allocation\u plan\u id=Allocation\u plan.Allocation\u plan\u id上
提交事务t;
此答案是在删除行的同时将分配计划id放入表变量中
该事务确保在不更新分配计划表的情况下不会删除数据
我重写了你的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;
开始事务t
声明@deleted table(分配计划id int)
删除分配\u计划\u详细信息\u克隆
输出已删除。分配\计划\ id
进入@deleted
从分配\u计划\u详细信息\u克隆
其中开始日期<日期添加(小时,-72,GETDATE())
更新分配计划
设置HasClone=0
从分配计划
参加
@删除d
在d.Allocation\u plan\u id=Allocation\u plan.Allocation\u plan\u id上
提交事务t;
这正是我想要的。谢谢先生!这正是我想要的。谢谢先生!这正是我想要的。谢谢先生!这正是我想要的。谢谢先生!这正是我想要的。谢谢先生!