not in 查不到数据 求大佬解答

2023-03-03 15:32:24 +08:00
 coderstory

现在有个表 id 列是可重复的 tid 列是不重复的 现在需要按 id 列分组 删除 分组后第一条之后的数据

SELECT tid FROM task_info group by id

查询到数据 这些 tid 是需要保留的

523763312515
531589750696
609232912408
791117856085
840800426753
939049452487

这个查询是查询需要删除的数据 排除需要保留的就是需要删除的

select * FROM task_info where tid not in (SELECT tid FROM task_info group by id)

但实际这个语句查不到任何数据 tid 的数据类型是 bigint

not in 改成 in 又能查到全部数据

1079 次点击
所在节点    MySQL
5 条回复
tbv
2023-03-03 16:07:45 +08:00
尝试使用以下查询语句:

SELECT id, MIN(tid) AS first_tid
FROM task_info
GROUP BY id;

这将先按 id 分组,然后对于每个分组,选择最小的 tid 值作为“第一条数据”。然后,你可以在使用这个查询结果的基础上重新构建你的表。

以下是一个例子:

WITH first_tids AS (
SELECT id, MIN(tid) AS first_tid
FROM task_info
GROUP BY id
)
SELECT *
FROM task_info
WHERE (id, tid) IN (SELECT id, first_tid FROM first_tids);

这将选择每个分组中的第一条数据,即具有最小 tid 值的数据,并从原始表中保留这些数据,而删除其他数据。
(以上来自于 chatgpt )
liprais
2023-03-03 16:12:35 +08:00
用 not exists
iacker
2023-03-03 16:28:52 +08:00
应该是有 null 值
wander555
2023-03-03 16:31:48 +08:00
您所提供的 SQL 查询语句中存在问题。在使用 not in 子句时,如果子查询返回的结果集中存在 NULL 值,那么主查询将不会返回任何结果,这可能会导致结果不符合预期。因此,您可以使用 not exists 子句来避免这个问题。

以下是一个可能的解决方案:

sql
Copy code
DELETE FROM task_info t1
WHERE EXISTS (
SELECT 1 FROM task_info t2
WHERE t1.id = t2.id AND t1.tid > t2.tid
);
这个查询将按照 id 列进行分组,并删除每组中 tid 列的第一个之后的所有行。

请注意,这个查询可能会删除与您提供的保留的 tid 列中的值相同的行。如果您想保留这些行,请将子查询的 WHERE 子句中的 NOT 删除。

sql
Copy code
DELETE FROM task_info t1
WHERE EXISTS (
SELECT 1 FROM task_info t2
WHERE t1.id = t2.id AND t1.tid > t2.tid
AND t2.tid NOT IN (523763312515, 531589750696, 609232912408, 791117856085, 840800426753, 939049452487)
);
这个查询将保留与您提供的保留的 tid 列中的值相同的行。
OOKAMI
2023-03-04 01:46:25 +08:00
考虑一下将分组第一行的数据写到新表,清空原表再塞回去?

CREATE TABLE NEW_TABLE AS
SELECT ID,TID FROM (
SELECT ID,TID, RANK() OVER(PARTITION BY ID ORDER BY TID) AS RANK FROM TASK_INFO
) WHERE RANK=1;

DELETE FROM TASK_INFO;

INSERT INTO TASK_INFO
SELECT * FROM NEW_TABLE;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/920853

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX