删除SELECT Mysql结果中的重复项如果任何列1=column2,则为重复项

删除SELECT Mysql结果中的重复项如果任何列1=column2,则为重复项,mysql,Mysql,好的,我有一个名为posts的表,我试图删除重复项,条件是如果post_id之一等于post_dat_id,并且只有当post_data_id==post_id的post_类型为2时才删除它 员额结构 编辑:我不想删除代码。如果代码符合我的选择中的条件,我只想不显示结果。另外,我已经在使用左连接,因为我的sql代码需要检查下表以获取用户id 编辑2:我还将post_数据更改为post_data_id,因此它现在是纯int,我还没有测试过这段代码,但我会这样做: select from posts

好的,我有一个名为posts的表,我试图删除重复项,条件是如果post_id之一等于post_dat_id,并且只有当post_data_id==post_id的post_类型为2时才删除它

员额结构 编辑:我不想删除代码。如果代码符合我的选择中的条件,我只想不显示结果。另外,我已经在使用左连接,因为我的sql代码需要检查下表以获取用户id


编辑2:我还将post_数据更改为post_data_id,因此它现在是纯int,我还没有测试过这段代码,但我会这样做:

select from posts p where p.id not in
(select q.id from posts q
where q.post_data = q.post_id and q.post_type = 2);

我不确定我是否完全理解了您的问题,但听起来您需要使用左连接来删除与给定条件匹配的行-

SELECT p1.*
FROM posts p1
LEFT JOIN posts p2
    ON p1.post_data_id = p2.post_id
    AND p1.post_type = 2
LEFT JOIN following f
    ON f.follower_id = 1
    AND p1.post_user_id = f.user_id 
WHERE p2.post_id IS NULL
AND (p1.post_user_id = 1 OR f.user_id IS NOT NULL)
ORDER BY  p1.post_time DESC 
LIMIT 0, 10

随着数据集的增长,这将对性能造成相当大的影响,而且看起来您的数据结构存在一些问题。您可能希望查看将自引用外键移动到其自己的字段。

大致相同,应该提供一些答案。问题是,它删除了post_type=2的所有数据,因为连接会查看post中的每个值,而它应该只查看满足第二个连接条件no的值。它在两个标准上都将两者结合起来。我刚刚根据上面的数据运行了它,它只删除了第二行。谢谢你的帮助,但它似乎仍然没有显示出来。请注意,我是如何跟踪用户3的,但它没有显示任何带有post#u类型2的帖子(我对sql做了一些修改)[1]:唯一应该显示的是post#38,由于您的限制条款,它没有显示出来。#165应该也显示出来,因为我没有跟踪用户2
select from posts p where p.id not in
(select q.id from posts q
where q.post_data = q.post_id and q.post_type = 2);
SELECT p1.*
FROM posts p1
LEFT JOIN posts p2
    ON p1.post_data_id = p2.post_id
    AND p1.post_type = 2
LEFT JOIN following f
    ON f.follower_id = 1
    AND p1.post_user_id = f.user_id 
WHERE p2.post_id IS NULL
AND (p1.post_user_id = 1 OR f.user_id IS NOT NULL)
ORDER BY  p1.post_time DESC 
LIMIT 0, 10