这就是我所拥有的:
col1 | COL2
------ | ------
一个..... | x ......
一个..... | y ......
b ..... | y ......
c ..... | y ......
d ........ y ......
d ........ X .....
这就是我想要的:
col1 | COL2
------ | ------
一个..... | x ......
b ..... | y ......
c ..... | Ÿ......
d ..... | X ......
因此,当它与另一行中的x配对时,想法是删除col1与y配对的任何行。
我是sql的新手!我能做的最近的事情就是这个,但它并没有帮助...... https://stackoverflow.com/editing-help
谢谢: - )
答案 0 :(得分:1)
尝试类似:
DELETE FROM your_table_name
WHERE col2 = 'y'
AND col1 IN (SELECT col1
FROM your_table_name
WHERE col2 = 'x')
答案 1 :(得分:1)
SELECT DISTINCT ON (col1)
col1, col2 -- add more columns
FROM tbl
ORDER BY col1, col2;
简短快速,包含更多列很容易。技术说明和链接:
Select first row in each GROUP BY group?
DELETE FROM tbl t1
USING tbl t2
WHERE t2.col1 = t1.col1
AND t2.col2 = 'x'
AND t1.col2 = 'y'
IN
因大名单而出名
使用USING
子句(自联接)再次添加表格,以使其更短更快
使用EXPLAIN ANALYZE
验证效果。
答案 2 :(得分:0)
你真的想删除行吗?或者你只是想要一个返回你想要的查询?
对于您提供的数据,以下内容为您提供所需的结果:
select col1, min(col2) as col2
from t
group by col1;
表达逻辑的另一种方法是:
select t.*
from t
where not (t.col2 = 'Y' and
exists (select 1 from t t2 where t2.col1 = t.col1 and t2.col2 = 'X')
)
答案 3 :(得分:0)
根据Igor的回答,您可以添加一个触发器,以便在您的工作流程中自动执行此操作。
create or replace function auto_delete_y_rows() returns trigger as $$
begin
delete from tbl
where col2 = 'y'
and col1 = new.col1;
return null;
end;
$$ language plpgsql;
create trigger auto_delete_y_rows
after insert or update on tbl
for each row
when (new.col2 = 'x')
execute procedure auto_delete_y_rows();