Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 999

/ вопрос открыт /

Здравствуйте, эксперты!
Работаю с MS Access через ADO в Delphi 7 База содержит две таблицы: Регионы - regions: id, name_reg Объекты - objects: id, name_reg, name_obj. Таблицы связаны по полю name_reg.
Как сделать так чтобы в главной таблице (regions) отображались только те записи которым соответсвуют записи во второй (objects).

Александр-вц Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Александр-вц (статус: Посетитель)
Вопрос отправлен: 15 июля 2009, 01:22
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Егор

Здравствуйте, Александр-вц!
Тогда вам проще всего воспользоваться компонентом TADOQuery - в его свойство SQL прописываете запрос:

SELECT name_reg
FROM regions, objects
WHERE regions.name_reg=objects.name_reg
GROUP BY name_reg;

Это если у вас таблицы всё ещё связаны по полю name_reg.
Правильнее было бы во второй таблице (objects) сделать структуру вида id, id_reg, name_obj. И тогда запрос должен был бы выглядеть так:

SELECT name_reg
FROM regions, objects
WHERE regions.id=objects.id_reg
GROUP BY name_reg;

Если что непонятно и будут вопросы - задавайте.

Ответ отправил: Егор (статус: 10-ый класс)
Время отправки: 15 июля 2009, 20:11
Оценка за ответ: 5

Комментарий к оценке: Спасибо!

Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 16 июля 2009, 05:57; участников в обсуждении: 4.
Егор

Егор (статус: 10-ый класс), 15 июля 2009, 09:26 [#1]:

Первое - обычно таблицы связывают не по строковым полям (в вашем случае name) - это дурной тон, а по числовым, а конкретнее - по id.

Второе - поясните, как вообще должен отображаться вывод? Ну, т.е. напишите, кратко, часть каждой из таблиц и что вы хотите получить - одну таблицу, две (в одной выбираем строчку, во второй автоматически остаются только соответствующие записи и т.п.) или ещё как?

Думаю, что в вашем случае нужно будет пользоваться компонентом TADOQuery, но, может быть будет работать и TADOTable.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Тов. Женька

Тов. Женька (статус: 3-ий класс), 15 июля 2009, 10:14 [#2]:

Просмотрите https://expert.delphi-int.ru/question/2993/ - там аналогичный вопрос.
Александр-вц

Александр-вц (статус: Посетитель), 15 июля 2009, 19:44 [#3]:

В первой таблице строки: - Ярославская область
- Московская область
- Мурманская область.
Во второй таблице название АЗС(заправки).
Не в каждой области они есть.
Необходимо чтобы в первой таблице показывались только области в которых эти заправки есть. Если в области нет АЗС то и выводить эту строку в главной таблице не нужно.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 15 июля 2009, 20:33 [#4]:

to Егор - для чего используете в запросе Group by ??? Если хотите отсортировать по алфавиту, тогда надо order by.
Если хотите исключить повторяющиеся значения, то надо использовать ключевое слово distinct
Егор

Егор (статус: 10-ый класс), 15 июля 2009, 20:43 [#5]:

GROUP BY не для сортировки, а для группировки. Если в Ярославской области будут 10 заправок, то зачем выводить 10 раз "Ярославская область"?
Если же нужна сортировка - то, да, нужна ещё и секция ORDER BY.
Запрос делает то, что было сказано в задании - выводит список регионов. И только. Если нужно выводить ещё и заправки - ну, тут немного надо запрос подправить :)
---------
добавлено:
Мда, не посмотрел, действительно, можно было бы и distinct, согласен. :) Просто не привык к нему, всё группировкой делаю :)
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 16 июля 2009, 05:57 [#6]:

если бы надо было выводить названия заправок, то запрос с group by - выдаст ошибку. в списке выводимых значений в этом случае могут быть либо поля, определяющие группировку, либо агрегатные функции. К тому же group by тормозит выполнение запроса (дополнительные затраты на выполнение группировки). Поэтому делать группировку там, где она не нужна - не очень хорошо.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:58
Выполнено за 0.02 сек.