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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2016, 19:35   #21
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

1. Что-бы запрос был читабелен как для тебя, так и на форуме стоит не сплошной строкой его преподносить, а хотя бы так, как ниже. Кто-то и по другому это делает, не важно. Так читабельнее?
Код:
insert into Notification (
    [Организация], [Структурное подразделение],OborudovanieID,[№ п/п],
    [Наименование единицы],[Оперативный номер],[Тип оборудования],[Заводской номер],
    [Технические характеристики],[Год выпуска],[Техническое состояние])
  select Organization.[Организация], Zavod.[Структурное подразделение], Oborudovanie.OborudovanieID,Oborudovanie.[№ п/п],
      Oborudovanie.[Наименование единицы],Oborudovanie.[Оперативный номер],Oborudovanie.[Тип оборудования],Oborudovanie.[Заводской номер],
      Oborudovanie.[Технические характеристики],Oborudovanie.[Год выпуска],Oborudovanie.[Техническое состояние]
    from Organization, Zavod, Oborudovanie
    where [Организация]<>Organization.[Организация] and
          [Структурное подразделение]<>Zavod.[Структурное подразделение] and
          OborudovanieID<>Oborudovanie.OborudovanieID and
          [№ п/п]<>Oborudovanie.[№ п/п] and
          [Наименование единицы]<>Oborudovanie.[Наименование единицы] and
          [Оперативный номер]<>Oborudovanie.[Оперативный номер] and
          [Тип оборудования]<>Oborudovanie.[Тип оборудования] and
          [Заводской номер]<>Oborudovanie.[Заводской номер] and
          [Технические характеристики]<>Oborudovanie.[Технические характеристики] and
          [Дата замеров]<>Oborudovanie.[Дата замеров]
Это плюс ко всему и минимизирует время на отладку запроса.

2. Какое-то не реальное условие выборки, сплошь не равенство. Возьми подзапрос с этим условием и отдельно его выполни. Очень удивишься результатам.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.03.2016, 00:08   #22
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

Подскажите, я правильную конструкцию использую?
Код:
INSERT INTO ... SELECT ... FROM ... WHERE NOT EXISTS (SELECT ... FROM ... WHERE ...=...  )
спасибо.
Ernest027 вне форума Ответить с цитированием
Старый 03.03.2016, 09:02   #23
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

Вот что нужно:
Из 1-ой таблицы в 4-ую поле «Организация»
Из 2-ой таблицы в 4-ую поле «Структурное подразделение»
Из 3-ой таблицы в 4-ую поле «Наименование единицы»
причем только те записи, которых еще нет в 4-ой таблице.
Структуры таблиц привел.

делаю так:
Код:
insert into Notification (
[OrganizationID],[ZavodID],[Организация], [Структурное подразделение],[OborudovanieID],[№ п/п],[Наименование единицы],[Оперативный номер],[Тип оборудования],[Заводской номер],[Технические характеристики],
[Год выпуска],[Техническое состояние]) 
select Organization.[OrganizationID],Zavod.[ZavodID],Organization.[Организация], Zavod.[Структурное подразделение],Oborudovanie.[OborudovanieID],
Oborudovanie.[№ п/п],Oborudovanie.[Наименование единицы],Oborudovanie.[Оперативный номер],Oborudovanie.[Тип оборудования],Oborudovanie.[Заводской номер],Oborudovanie.[Технические характеристики],
Oborudovanie.[Год выпуска],Oborudovanie.[Техническое состояние] from Organization, Zavod, Oborudovanie
where not exists (select [Организация], [Структурное подразделение],[OborudovanieID],[№ п/п],[Наименование единицы],[Оперативный номер],[Тип оборудования],[Заводской номер],
[Технические характеристики],[Год выпуска],[Техническое состояние] from Notification 
where [OrganizationID]=Organization.[OrganizationID] and [ZavodID]=Zavod.[ZavodID] and OborudovanieID=Oborudovanie.OborudovanieID)
но все данные перемешиваются
Должно быть, например,
Растение - дерево - береза
Техника - машина - тайота
а в итоге получается
Растение - дерево - береза
Растение - машина - береза
Растение - дерево - тайота
Растение - машина - тайота и т.д.
Изображения
Тип файла: jpg 1.jpg (14.4 Кб, 145 просмотров)

Последний раз редактировалось Ernest027; 03.03.2016 в 09:20.
Ernest027 вне форума Ответить с цитированием
Старый 03.03.2016, 09:32   #24
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

делай раз узнаем какое оборудовние надо ВНЕСТИ
Код:
 select t3.id 
from t3 
where t3.nexttime<:contoldate --оборудование требующее проверки по времени
and not exists ( select t4.id from t4.id_t3=t3.id ) --оборудование ЕЩЕ НЕ внесено в реестр проверок (t4)
делай два дополним наш набор всеми требуемыми полями (НА САМОМ ДЕЛЕ ОНИ ТАМ СОВСЕМ ЛИШНИИ)
Код:
select t3.id, t2....., t1..... --перечислить нужные нам поля таблиц 
from t3, t2, t1 -- "добавляем" информацию из других таблиц
where t3.id_t2 =t2.id and t2.id_t1=t1.id --правилА "присоединения"  та самая стр 53 и далее.
  and --наши "исходные" условия отбора
       t3.nexttime<:contoldate --оборудование требущее проверки
        and not exists ( select t4.id from t4.id=t3.id ) --оборудование Уже внесено в реестр проверок (t4)
делай три пишем куда это надо вставлять с соблюдением правильной(одинаковой) последовательности полей
Код:
insert into t4 (....)
select .....  -- смотри два
ТРЕНИРУЕМ написание раз, два, три по порядку, начиная с раз.
желательно при этом использовать среду позволяющую писать запрос и сразу видеть его результаты.

P.S. по поводу замечания лишние поля таблицы 4
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 03.03.2016 в 09:48.
evg_m на форуме Ответить с цитированием
Старый 03.03.2016, 09:47   #25
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

По поводу Таблицы 4:
Автоинкрементные поля только назвал на латинице. А почему нельзя на русском да еще и с пробелами?
Ernest027 вне форума Ответить с цитированием
Старый 03.03.2016, 10:25   #26
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

Код:
select OborudovanieID from Oborudovanie where '+inttostr(MonthsBetween(Date,DataModule2.ADOQuery3.FieldByName('Дата следующих замеров').AsDateTime)<=2)
почему неправильно? пишет "there is no overloaded 'InttoStr'...".
Ernest027 вне форума Ответить с цитированием
Старый 03.03.2016, 10:37   #27
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Ernest027 Посмотреть сообщение
Код:
select OborudovanieID from Oborudovanie where '+inttostr(MonthsBetween(Date,DataModule2.ADOQuery3.FieldByName('Дата следующих замеров').AsDateTime)<=2)
почему неправильно? пишет "there is no overloaded 'InttoStr'...".
посчитайте сколько открывающих скобочек и сколько закрывающих!
не хватает скобки
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.03.2016, 10:40   #28
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

по 3 с каждой стороны, где не хватает? или я слепой?
Ernest027 вне форума Ответить с цитированием
Старый 03.03.2016, 10:47   #29
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

у Вас получается
Код:
inttostr(число<=2)
что, по вашему, должна вернуть функция IntToStr для операции сравнения ?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.03.2016, 10:52   #30
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

Вы говорите у меня скобок не хватает. а как нужно написать?
Ernest027 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL запрос Tanushka=) SQL, базы данных 2 23.05.2011 17:09
Запрос в SQL Анн Помощь студентам 2 16.12.2010 19:51
Запрос с 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