Форум программистов, компьютерный форум, киберфорум
Firebird/InterBase
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 10.05.2014
Сообщений: 10
1

Составить запрос, который должен отобразить все экспонаты, которые не участвуют в определенной выставке

01.06.2014, 11:24. Показов 1395. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Есть таблица экспонатов ET и выставок EN, которые соединены в отношении многие ко многим в таблице ENET (Id_enet, id_et, id_en).

Нужен запрос, который должен отобразить все экспонаты, которые не участвуют в определенной выставке. Голову сломала, как отобразить экспонаты выставки понятно, а вот как не участвующие не понимаю)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2014, 11:24
Ответы с готовыми решениями:

SQL запрос, который бы выводил все поля(*) тех записей из таблицы1, ссылки на которые хранятся в таблице2
В таблице1 хранится набор из множества записей. В таблице2 - ссылки на некоторые из этих...

Алгоритм, который позволит напечатать все шестерки символов, которые можно из этого набора составить
Здравствуйте, помогите решить задачу на Паскале, буду ооочень благодарна Пусть имеется набор...

Запрос Который Должен Заполнить Табличную Часть Документа
Доброго времени суток. Задание на этот раз такое: По кнопке «Заполнить» в табличную часть...

Запрос Который Должен Заполнить Табличную Часть Документа
Доброго времени суток. Задание на этот раз такое: По кнопке «Заполнить» в табличную часть...

4
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,255
01.06.2014, 12:41 2
Цитата Сообщение от BE_GOODY Посмотреть сообщение
Здравствуйте! Есть таблица экспонатов ET и выставок EN, которые соединены в отношении многие ко многим в таблице ENET (Id_enet, id_et, id_en).
SQL
1
2
SELECT * FROM ET
WHERE NOT(EXISTS(SELECT 1 FROM ENET WHERE ENET.id_en = :id_en)AND(ENET.id_et = ET.id_et))
Это при условии что в таблице ET .d_et - код экспоната
0
0 / 0 / 0
Регистрация: 10.05.2014
Сообщений: 10
01.06.2014, 13:08  [ТС] 3
SAMZ, пишу вот так в
Delphi
1
2
3
4
5
6
7
  EtAdd.ExhibitAdd.SelectSQL.Clear;
  EtAdd.ExhibitAdd.SelectSQL.Add('SELECT * FROM EXHIBIT ');
  EtAdd.ExhibitAdd.SelectSQL.Add('WHERE NOT (EXISTS(SELECT 1 FROM ENET WHERE ENET.ID_EN=');
  EtAdd.ExhibitAdd.SelectSQL.Add(IntTostr(DBC.Exhibition.FieldByName('ID_EN').AsInteger));
  EtAdd.ExhibitAdd.SelectSQL.Add(')AND(ENET.ID_ET=EXHIBIT.ID_ET)');
  EtAdd.ExhibitAdd.Open;
  EtAdd.ExhibitAdd.FetchAll;
выдает ошибку

Dynamic SQL Error
SQL error code = -104
as approximate floating-point values in SQL dialect 1, but as 64-bit.
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,255
01.06.2014, 13:38 4
Я с таким сообщением об ошибке не встречался. Но.
во-первых
зачем Вам такая конструкция
Delphi
1
IntTostr(DBC.Exhibition.FieldByName('ID_EN').AsInteger)
Не проще ли вместо этого
Delphi
1
 DBC.Exhibition.FieldByName('ID_EN').AsString
У Вас совершенно ненужное двухступенчатое преобразовапние: поле --> целое --> строка
Зачем?!
Во вторых, не проще ли в компоненте на этапе проектирования прописывать текст SelectSQL с параметрами и перед открытием набора задавать значения параметров. При этом этот запрос перед использованием в проекте легко проверить в IBExpert и убедиться в его корректности. Разумеется, иногда приходится формировать текст запроса динамически, но ИМХО это - не должно быть правилом.
В третьих, судя по тексту сообщения Вы используете диалект 1. Пора уж работать в диалекте 3.
0
0 / 0 / 0
Регистрация: 10.05.2014
Сообщений: 10
01.06.2014, 13:51  [ТС] 5
SAMZ, я работаю в диалекте 3. За IntToStr спасибо) у меня просто запросы к таблице меняются в ходе работы, поэтому приходится формировать динамически)

ну и с вопросом разобралась сама

Delphi
1
2
3
4
5
6
EtAdd.ExhibitAdd.SelectSQL.Clear;
  EtAdd.ExhibitAdd.SelectSQL.Add('SELECT * FROM EXHIBIT ');
  EtAdd.ExhibitAdd.SelectSQL.Add('WHERE ID_ET<>ALL(SELECT ID_ET FROM ENET WHERE ENET.ID_EN=');
  EtAdd.ExhibitAdd.SelectSQL.Add(IntTostr(DBC.Exhibition.FieldByName('ID_EN').AsInteger)+')');
  EtAdd.ExhibitAdd.Open;
  EtAdd.ExhibitAdd.FetchAll;
0
01.06.2014, 13:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2014, 13:51
Помогаю со студенческими работами здесь

Написать запрос для одной таблички, который должен делать INSERT
Всем привет. Есть програмка на шарпе с подключеной MSSQL2014. Надо написать запрос для одной...

Запрос, который должен посчитать количество записей в БД возвращает bool(false)
Доброго времени суток. Почему запрос, который должен посчитать количество записей в БД возвращает...

Как отобразить запрос на jsp, который возвращает одну строку?
Здравствуйте. Как отобразить запрос, на выборку информации о пользователе, который зашел в систему...

Для телефонной компании составить список клиентов, который должен содержать:
Исправьте пожалуйста ошибки в программе. Очень прошуууууууу. И скриншот результата. Буду очень...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru