gpt4 book ai didi

mysql - 如何从数据库表中删除记录(不包括另一个SQL中的记录)

转载 作者:行者123 更新时间:2023-11-30 00:08:42 26 4
gpt4 key购买 nike

我有一个搜索日志表,我保存搜索日志。表结构就像搜索字符串、日期、每个搜索字符串的结果数量以及其他一些信息。我有以下 SQL 来获取我需要的记录。一个关键字可能会被搜索多次,因此最新日期很重要。我使用以下 SQL 来获取我需要的记录。运行良好。

SELECT id, searchstring, max(logdate) as logdate 
FROM log_search
WHERE locale = 'en' AND results > 0
GROUP BY searchstring
ORDER BY logdate DESC

我的问题是有数百万条记录,我需要清理它。我只是想保留与上面的sql匹配的记录。

我尝试在 id 字段上使用 NOT IN,但由于按 logdate 排序很重要,所以我不允许这样做。

DELETE FROM log_search WHERE id NOT IN (...MYQUERY...) 但它给出 Operand should contains 1 columns(s) 错误

另一个重要字段是 locale 。删除 en 的记录时,我需要保留其他语言环境,即使它们与上面的 SQL 不匹配。

有没有办法删除记录并保留我需要的记录。

编辑

表结构Id - 自动递增搜索字符串results - 包含该搜索字符串的结果数logdate - 进行搜索的日期和时间

resultslogdate 对于获取返回结果的最新查询都很重要。

解决方案/解决方法

@Sunny 的答案在技术上是可行的,但对于像数百万条记录这样的大表,它的性能很糟糕。安装后,我通过创建另一个表并将我需要的记录插入其中来解决问题。这是我的 SQL

INSERT INTO log_search_simple
SELECT id, searchstring, max(logdate) as logdate, locale
FROM log_search
WHERE locale = 'en' AND results > 0
GROUP BY searchstring
ORDER BY logdate DESC

最佳答案

您的尝试是正确的,您只需选择一列 id 而不是多列。

尝试一下。

            DELETE FROM log_search FROM log_search WHERE id Not in (SELECT id FROM log_search WHERE locale = 'en' AND results > 0 GROUP BY searchstring )

关于mysql - 如何从数据库表中删除记录(不包括另一个SQL中的记录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24281016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com