У меня есть таблица с такими столбцами:
сайт, хромосома, цепочка.
Пара сайтов и хромосома должны быть уникальными, в то время как они могут иметь более одной цепочки.Перед загрузкой данных я обнаружил, что некоторые сайты имеют более одной хромосомы, что, очевидно, является ошибкой.Я пытался идентифицировать ошибки, то есть сайты с более чем 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, чтобы я мог немного изменить его, чтобы он работал.Два ответа дают одинаковые результаты.Еще раз спасибо, ребята.
Сайт