根据查询输出删除记录
Posted
技术标签:
【中文标题】根据查询输出删除记录【英文标题】:Delete Records Based on Query Output 【发布时间】:2022-01-20 15:39:58 【问题描述】:我有一张桌子,THEKITCHEN
有一个查询:
SELECT FOOD, COUNT(FOOD)
FROM THEKITCHEN
GROUP BY FOOD
这将返回以下输出:
FOIEGRAS 1
APPLEPIE 1
SORBET 1
FILETMIGNON 1
BRANZINO 5
TRUFFLES 2
ESCARGO 1
POULET 2
我接下来要做的是使用以下内容删除项目:
DELETE FROM THEKITCHEN
WHERE FOOD IN ('FOIEGRAS')
现在这可行,但有时我需要删除该列中的所有项目/记录。并且运行 DELETE
语句 15-40 次变得很烦人。
是否可以将初始查询的输出放入一个变量中,然后对该变量使用DELETE
语句来删除所有项目?我试过了
UPDATE THEKITCHEN
SET FOOD = NULL;
但错误在于我的表不允许 Null。
谢谢!
更新:THEKITCHEN 有其他列,我不想从中删除记录。所以 TRUNCATE TABLE THEKITCHEN 会丢失很多重要的东西。
更新:是的,TRUNCATE TABLE THEKITCHEN 是要走的路!
【问题讨论】:
如果您想删除所有项,无论它们是什么,简单的DELETE THEKITCHEN
或TRUNCATE TABLE THEKITCHEN
就足够了,无需先查询它们。如果您只是想删除多个项,您可以使用WHERE FOOD IN ('FOIEGRAS', 'APPLEPIE', 'SORBET')
。如果您想根据特定查询进行删除,请使用DELETE ... FROM
或CTE (WITH BADKITCHEN AS (SELECT ... FROM THEKITCHEN) DELETE BADKITCHEN
),但具体情况不在您的问题范围内。
您的问题有点令人困惑,因为您指的是删除 column - 您删除了 rows。
True.. 感谢您指出这一点。我的意思是一列中的所有行。 @Stu
@vicscul 不,你的意思是 table 中的所有行
一张表由行(垂直的东西)组成,每一行都包含列(水平的东西)。您只能删除行;列不能单独删除。您可以从表中删除 列,但随后它将从所有行中消失。您可以将列设置为NULL
(就像您所做的那样),但如果该列不允许NULL
,那将不起作用。我建议你仔细重新考虑你真正追求的是什么——如果必须的话,用你的餐桌前后来描述它。
【参考方案1】:
如果你想删除所有的食物,你根本不需要条件,只需使用delete from thekitchen
。此外,您可以使用 DDL 语句truncate table thekitchen
,这样会更快。
【讨论】:
经过大量阅读和理解 DELETE 语句的作用,是的,TRUNCATE TABLE THEKITCHEN 是要走的路 @vicscul 如果此答案解决了您的问题,请“接受”它。以上是关于根据查询输出删除记录的主要内容,如果未能解决你的问题,请参考以下文章