2013-12-04 2 views
0

у меня есть два отдельных запросов, которые в значительной степени возвращают то же самое:осталось объединить два отдельных запросов

select id 
from t 
where id<>'' 
GROUP BY id 
having count(*) >= 2; 

select id 
from t2 
where id is not null 
GROUP BY id 
having count(*) >= 2 
ORDER BY id ASC; 

список идентификаторов, значения более одного раза. Первый запрос возвращает больше второго. Поэтому мне нужно как-то оставить их, чтобы получить результаты, которые находятся в первом запросе, но не во втором. Я попытался сделать левое соединение, но он работает неправильно.

Я также попытался следующие без толку:

select id 
from t 
where id<>'' 
GROUP BY id 
having count(*) >= 2 
    not in (select id from t2 where id is not null GROUP BY id having count(*) >= 2 
      ORDER BY id ASC) 

Дополнительная информация

Запрос один дает мне все идентификаторы, которые имеют одинаковое значение для таблицы 1 и запрос 2 дает мне все те же значения для таблицы 2. Есть дополнительные gotchas, как есть некоторые пустые идентификаторы в таблице 1, в то время как в таблице 2 есть некоторые нули, следовательно, условия, исключающие пробелы для первого и nulls для последнего. Поэтому я возвращаю эти два отдельных результата, которые почти одинаковы, кроме как в результатах 1 имеются утверждения, что arent в результатах 2 , но только при выполнении этих запросов, поскольку они дублируются в таблице 1, но не в таблице 2. хотя они существуют в таблице 2. Таким образом, простое левое соединение, где t1.id <> t2.id не будет работать, потому что они существуют в t2.

enter image description here

+1

Что вы * на самом деле хотите получить запрос? –

+0

@ExplosionPills дают мне те, что были в моем первом запросе, которые не во втором. –

ответ

1
SELECT t.id, t2.id FROM t 
LEFT OUTER JOIN t2 
ON t.id <> t2.id 
WHERE t.id<>'' 
GROUP BY t.id having count(t.id) >= 2 
ORDER BY t.id ASC 

Я предполагаю, что ваш не в части до того, как подзапрос на самом деле означает, что идентификатор из таблицы т и t2 не одинаковы и поэтому добавили условие t.id <> t2 .id

EDIT

SELECT t.id FROM t 
WHERE t.id<>'' 
AND t.id NOT IN (SELECT id FROM t2 where id is not null) 
GROUP BY t.id having count(t.id) >= 2 
ORDER BY t.id ASC 

SQLFIDDLE

+0

он работает вечно: -/и ничего не возвращает –

+0

@EduardoDennis Проверьте мой обновленный запрос (отредактируйте часть). – Damodaran

+0

, но позволяет сказать, что вы добавили один 4 ко второму, который не возвращает 4 в результатах. Но его предполагается, что с 4 во втором есть только один раз, когда я пытаюсь вернуть только значения, которые являются дубликатами в первой таблице, которые не дублируются во втором, независимо от того, появляются ли они один раз или нет. –

1

Вы хотите, чтобы выбрать идентификаторы в t1, которые не являются в t2. JOIN на t2 и убедитесь, что результат NULL.

SELECT t.id 
FROM t1 
LEFT JOIN t2 ON t1.id = t2.id 
WHERE t2.id IS NULL 
GROUP BY t.id 
HAVING COUNT(t.id) > 1 
+0

, но мне это нужно только для тех, которые больше, чем счет больше, чем 2, так что в основном эти дополнительные условия? –

+0

@EduardoDennis вы имеете в виду ids в t1 не в t2, из которых в t1 больше одного? –

+0

Дополнительная информация Я отправил, извините за неопределенность моего оригинального сообщения. –

Смежные вопросы