我有一张这样的表格;
位点、染色体、链。
这对位点和染色体应该是唯一的,而它们可以有多个链。在加载数据之前,我发现有些站点的染色体不止一个,这显然是一个错误。我试图找出错误,即多于 1 条染色体的位点。我已经考虑过了,但无法提出正确的 SQL。所以我把问题分开了。首先,我创建一个选择不同记录的表;
create table distinct_pair
as select distinct site, chromosome
from original_table;
然后我可以通过这个找到具有多个染色体的位点;
select site
from distinct_pair
group by site
having count(site)>1;
它工作得很好。然后尝试从原始表中查看错误的全部信息,我这样做了;
select * from original_table
where site
in (select name from distinct_pair
group by site
having count(site)>1);
然后这个子查询太慢了,即使列都被索引了。
我试图将查询重写为连接,但这样做很困难。请帮我。
====================
感谢所有回答这个问题的人。我的数据看起来像这样。
Site | Chromosome | Strand
N111 | 2L | +
N111 | 2L | -
N112 | 2L | +
N112 | 2L | -
N112 | 3L | +
N112 | 3L | -
....
在这种情况下,N111 很好,但 N112 是错误的,因为它有两个染色体数据。由于链的原因,第二个答案的子查询选择了 N111 和 N112,这与我遇到的问题相同。具有多列的按功能分组的工作方式与我的猜测不同。但是,建议的答案给了我一个线索 group by 如何工作,以便我可以稍微修改它以使其工作。这两个答案给出了相同的结果。再次感谢各位。
地点