根据查询输出删除记录

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 THEKITCHENTRUNCATE 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 如果此答案解决了您的问题,请“接受”它。

以上是关于根据查询输出删除记录的主要内容,如果未能解决你的问题,请参考以下文章

MySql根据字段名查询重复记录并删除!只保留一条

mysql重复记录的查询删除方法

查询及删除重复记录的SQL语句

MySQL的查询及删除重复记录

Oracle查询及删除重复数据

MySQL查询删除重复记录