Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Postgresql中删除活动标志为false的重复行_Postgresql - Fatal编程技术网

在Postgresql中删除活动标志为false的重复行

在Postgresql中删除活动标志为false的重复行,postgresql,Postgresql,我有一个列ID,名称,电子邮件,活动的表。我在表中添加了一些重复的值 我要删除标志为false的重复行,而不是所有活动标志为false的行。在表中,我只想删除第二行。在实际删除之前,您可以尝试下面的相关子查询,您可能希望使用SELECT query查看结果- DELETE FROM YOUR_TABLE T1 WHERE EXISTS (SELECT NULL FROM YOUR_TABLE T2 WHERE T1.ID = T2.I

我有一个列ID,名称,电子邮件,活动的表。我在表中添加了一些重复的值


我要删除标志为false的重复行,而不是所有活动标志为false的行。在表中,我只想删除第二行。

在实际删除之前,您可以尝试下面的相关子查询,您可能希望使用SELECT query查看结果-

DELETE FROM YOUR_TABLE T1
WHERE EXISTS (SELECT NULL
                FROM YOUR_TABLE T2
               WHERE T1.ID = T2.ID
                 AND T1.NAME = T2.NAME
                 AND T1.EMAIL = T2.EMAIL
                 AND T1.ACTIVE <> T2.ACTIVE)
  AND UPPER(T1.ACTIVE) = 'FALSE'
请尝试以下查询:

DELETE t1 FROM tablename t1 
INNER JOIN tablename t2 
WHERE t1.id > t2.id AND t1.Name = t2.Name AND t1.Email =t2.Email AND t1.Active='FALSE'

如果一个名字有两条记录,而这两条记录都是假的,会发生什么?我们是否要删除其中一个,如果是,那么这里的逻辑是什么?您应该描述您的解决方案,因为这对OP和其他遇到此问题的用户更有帮助。您是否确实尝试过您的解决方案?如果是,您对结果满意吗?@mustaccio是,尽管在问题中显示的三行表上。你能详细说明一下吗?我假设表是非规范化的,并且相同的id总是指向相同的名称和电子邮件。如果这不是真的,那么就很容易扩展组并使用特别的三重id、名称和电子邮件。
DELETE FROM some_table
WHERE id IN (SELECT id FROM some_table GROUP BY id HAVING COUNT(*)>1)
  AND NOT active;
DELETE FROM users T1
    USING users T2
WHERE  T1.ID <> T2.ID
    AND T1.Name = T2.Name
    AND T1.Email = T2.Email
    AND T1.Active = FALSE;
CREATE TABLE IF NOT EXISTS users (
    ID serial PRIMARY KEY,
    Name VARCHAR ( 50 ) NOT NULL,
    Email VARCHAR ( 50 ) NOT NULL,
    Active BOOLEAN NOT NULL 
);

INSERT INTO users(Name, Email, Active) VALUES 
('John', 'john.gmail.com', TRUE),
('John', 'john.gmail.com', FALSE),
('Bob', 'bob.gmail.com', FALSE);
SELECT * FROM users;

DELETE FROM users T1
    USING users T2
WHERE  T1.ID <> T2.ID
    AND T1.Name = T2.Name
    AND T1.Email = T2.Email
    AND T1.Active = FALSE;
    
SELECT * FROM users;