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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2013, 18:16   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

LEFT JOIN дублирует исходящие записи если находится несколько по услувию ON . Сначала разберитесь что нужно получить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.03.2013, 19:02   #12
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
266 записей из 166 при простом запросе
при чем тут записи? вам запрос не записи выдает а набор данных, хоть книжку почитайте, а то так далеко не уедете.
eval вне форума Ответить с цитированием
Старый 01.04.2013, 10:44   #13
Владимир89
Новичок
Джуниор
 
Регистрация: 29.03.2013
Сообщений: 5
По умолчанию

Цитата:
при чем тут записи? вам запрос не записи выдает а набор данных, хоть книжку почитайте, а то так далеко не уедете.
Я знаком с прородителем SQL - ADA. Я знаком с SQL и его принципами работы, вопрос был относительно правильности составления самого запроса.

А вот причём здесь записи, так дело вот в чём (читайте тему внимательнее), есть запрос SELECT * FROM system, который выдаёт 166 записей (проверял, дубликатов нет, всё по списку, как и надо. Вот это и есть тот самый набор данных, а 166 - число строк, т.е. записей).
Далее надо было добавить доп. информацию в ту-же таблицу о мониторах, ЦП, ОЗУ, CD/DVD и винчестерах.
Склепав новый запрос обнаружил несоответствие в количестве выводимых записей. Когда получалось больше - это дубли, а некоторые записи отсутствовал, когда меньше (спасибо, кэп) отсутствовали записи.

Вот откуда эти числа и вот почему я по ним сверяюсь в первую очередь (т.к. каждый раз лопатить от 152 до 73817, проверяя соответствия по образцовому результату [ака "SELECT * FROM sysyem"], когда и так ясно, что тут уже не то, согласитесь глупо).

Народ, проблему решил.
Г-н Stilet дал довольно красивый запрос с LEFT JOIN, а г-н EVG_M поправил на счёт запятых.
В итоге проблема крылась в таблице с процессорами. По неизвестной причине (буду решать) она также наполнялась данными без маркировки 'CPUn', из-за чего строка "processor_device_id = 'CPU0'" отсеивала эти ЦП, а без неё выдавала свыше 40 тыс. записей.
Сейчас таблица ЦП из запроса убрана, как и условия с ним связанные, и всё встало как положено:
166 записей, пробежался по списку - всё чётко.

Спасибо всем, кто отвечал и помогал решить пробелму, тема за сим закрыта.
С уважением ко всем ответившим, Владимир.
Владимир89 вне форума Ответить с цитированием
Старый 01.04.2013, 10:53   #14
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
SELECT * FROM system, который выдаёт 166 записей
запрос (типа select) никогда не выдавал не выдает и не будет выдавать записи. это надо понимать как отче наш.
он выдает набор данных, а далее надо смотреть а что за данные он дает, и вот тут вы и поймете, что даже в миллионе строк данных может быть только 1 "запись".
поэтому если убрать условие то вы можете получить НЕ МЕНЕЕ 166 строк НД. следовательно сколько бы там этих строк не было, "записей" из главной таблице вы получите только 166 и НЕ БОЛЕЕ.
eval вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос SQL stas45rus БД в Delphi 3 29.11.2012 18:04
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15