获取SQL中的选定值

获取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

我想比较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
         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;

这正是我想要的。谢谢先生!这正是我想要的。谢谢先生!这正是我想要的。谢谢先生!这正是我想要的。谢谢先生!这正是我想要的。谢谢先生!