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

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
natnim
Сообщения: 2
Зарегистрирован: 02 дек 2009, 16:32

02 дек 2009, 17:12

вот запрос, который должен выполняться, но в итоге почему-то ноль.

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
Yurich
Сообщения: 104
Зарегистрирован: 23 фев 2004, 19:07

02 дек 2009, 19:07

Структура таблиц, пример данных в этих таблицах, какой сервер, какой результат этого запроса?
natnim
Сообщения: 2
Зарегистрирован: 02 дек 2009, 16:32

03 дек 2009, 08:11

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, то вообще говорит, что записей нет.
IceFlame
Сообщения: 62
Зарегистрирован: 29 ноя 2009, 03:54

03 дек 2009, 09:19

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

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

select count(*) from 
(select distinct meter,sernum from channels)
Аватара пользователя
Игорь Акопян
Сообщения: 1419
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

03 дек 2009, 13:32

natnim, вы сформулируйте точнее что должен делать запрос и ответ наполовину станет понятен ;)
Вывести количество записей из Ch1, которые что?
Изображение
Laba
Сообщения: 33
Зарегистрирован: 24 мар 2009, 17:47

26 янв 2010, 12:19

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

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

select count( distinct meter, sernum) from channels
Ответить