Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2009, 16:30   #1
NatNiM
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 19
По умолчанию Количество неравных данных

Имеются таблицы M и N. В таблице M есть поле num, в таблице N есть поле Name.
Необходимо подсчитать количество данных, которые различны. Различными данными считать те, у которых отличается одновременно num и Name.
Как построить запрос?
NatNiM вне форума Ответить с цитированием
Старый 02.12.2009, 16:43   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

жуть какая... ;(
Вы уверены, что правильно сформулировали задачу?!
таблицы точно НИКАК не связаны?!

вот, "наскидку"..
и абсолютно без уверенности, что это то, что Вам нужно...
Код:
select M.Num, N.Name from M, N 
  where M.Num<>N.Name
group by M.Num, N.Name
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.12.2009, 17:07   #3
NatNiM
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 19
По умолчанию

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

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

Последний раз редактировалось mihali4; 02.12.2009 в 17:19.
NatNiM вне форума Ответить с цитированием
Старый 02.12.2009, 17:34   #4
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

Жестокая у вас связь... не жалеете вы себя
что выдает этот запрос?
Код:
select count(*) --можно и так
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
©Учиться, учиться и еще раз учиться!
quit вне форума Ответить с цитированием
Старый 02.12.2009, 17:48   #5
NatNiM
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 19
По умолчанию

Цитата:
Сообщение от quit Посмотреть сообщение
Жестокая у вас связь... не жалеете вы себя
что выдает этот запрос?
Код:
select count(*) --можно и так
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
выдает их общее число - 12.
А вообще из них с одинаковыми sernum и meter - 1. Т.е. при верном запросе должно получится 11.
NatNiM вне форума Ответить с цитированием
Старый 02.12.2009, 21:55   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) приведите данные (хотя бы скриншот), а если возможно - дайте тестовую БД (с двумя заполненными табличками)

2) если запрос
Код:
select ch1.meter, ch2.meter, ch1.sernum, ch2.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
не возвращает ни одну запись, значит нет записей, где отличаются и METER и SERNUM
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.12.2009, 08:10   #7
NatNiM
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) приведите данные (хотя бы скриншот), а если возможно - дайте тестовую БД (с двумя заполненными табличками)

2) если запрос
Код:
select ch1.meter, ch2.meter, ch1.sernum, ch2.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
не возвращает ни одну запись, значит нет записей, где отличаются и METER и SERNUM
Этот не выдает ничего. переформулирую немного задачу. Можно упростить.
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, то вообще говорит, что записей нет.
NatNiM вне форума Ответить с цитированием
Старый 03.12.2009, 10:22   #8
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

Код:
select count(ch1.sernum) from channels ch1, channels ch2
where
ch1.meter=ch2.meter and
ch1.sernum=ch2.sernum
©Учиться, учиться и еще раз учиться!
quit вне форума Ответить с цитированием
Старый 03.12.2009, 10:30   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Одинаковые - это те, у которых равны meter и sernum.
фраза может быть понята двояко!
поясню.
вот вам пример таблички. (всё Ваше множество первичных ключей отметаем прочь, т.к. к поставленной задаче они отношения НЕ ИМЕЮТ!)
Код:
meter     sernum
___________________
kuk        s01
luk         s01
kuk        s02
suk        s03
suk        suk
сколько здесь (и укажите какие), по Вашему, "неодинаковых" записей?!?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.12.2009, 14:03   #10
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от 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.meter<>ch2.meter and
ch1.sernum<>ch2.sernum
выдает порядка 42 записей, хотя удовлетворяющих условию - 11.
Если связать и по chanid, то вообще говорит, что записей нет.
мне одному кажется нелепым при сравнении 2х колонок одной и той же таблицы их (таблицу и ее копию) еще перемножать друг на друга?
soleil@mmc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
количество строк ciaonataha Общие вопросы C/C++ 3 05.05.2009 16:31
количество цифер(с++) Cpluser Помощь студентам 1 05.05.2009 14:53
Количество строк delphin100 Общие вопросы Delphi 2 26.03.2009 11:58
количество цифр и количество символов до первой гласной буквы 111111 Общие вопросы C/C++ 2 22.12.2008 12:15
запрос который бы подсчитывал количество полных лет начиная с того года который указан в данных мне базах PereCCC Помощь студентам 8 15.05.2008 16:24