Страница 1 из 1

Количество неравных данных

Добавлено: 02 дек 2009, 17:12
natnim
вот запрос, который должен выполняться, но в итоге почему-то ноль.

select count(ch1.sernum) from channels ch1, channels ch2
where
ch1.dcid = ch2.dcid and
ch1.objid = ch2.objid and
ch1.devid = ch2.devid and
ch1.joinid = ch2.joinid and
ch1.chanid = ch2.chanid and

ch1.meter<>ch2.meter and
ch1.sernum<>ch2.sernum

Re: Количество неравных данных

Добавлено: 02 дек 2009, 19:07
Yurich
Структура таблиц, пример данных в этих таблицах, какой сервер, какой результат этого запроса?

Re: Количество неравных данных

Добавлено: 03 дек 2009, 08:11
natnim
Yurich писал(а):Структура таблиц, пример данных в этих таблицах, какой сервер, какой результат этого запроса?
Oracle. Имеется одна таблица с первичными ключами dcid, objid, devid, joinid, chanid и внешними ключами meter, sernum и еще несколькими. Необходимо найти количество записей, если есть одинаковые, не считать их два раза. Одинаковые - это те, у которых равны meter и sernum.
Я составила запрос:

select count(ch1.sernum) from channels ch1, channels ch2
where
ch1.dcid = ch2.dcid and
ch1.objid = ch2.objid and
ch1.devid = ch2.devid and
ch1.joinid = ch2.joinid and
ch1.meter<>ch2.meter and
ch1.sernum<>ch2.sernum
выдает порядка 42 записей, хотя удовлетворяющих условию - 11.
Если связать и по chanid, то вообще говорит, что записей нет.

Re: Количество неравных данных

Добавлено: 03 дек 2009, 09:19
IceFlame
Ну если dcid, objid, devid, joinid, chanid - это первичные ключи, то каждые meter и sernum, соответствующие одинаковым первичным ключам, - естественно также будут равны. Вот потому он 0 и выдает.
Может вам надо нечто подобное?

Код: Выделить всё

select count(*) from 
(select distinct meter,sernum from channels)

Re: Количество неравных данных

Добавлено: 03 дек 2009, 13:32
Игорь Акопян
natnim, вы сформулируйте точнее что должен делать запрос и ответ наполовину станет понятен ;)
Вывести количество записей из Ch1, которые что?

Re: Количество неравных данных

Добавлено: 26 янв 2010, 12:19
Laba
natnim писал(а): Необходимо найти количество записей, если есть одинаковые, не считать их два раза. Одинаковые - это те, у которых равны meter и sernum.
Может так?

Код: Выделить всё

select count( distinct meter, sernum) from channels