Последние записи
- Рандомное слайдшоу
- Событие для произвольной области внутри TImage
- Удаление папки с файлами
- Распечатка файла
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
15th
Июл
Подстановка данных сразу из 4 таблиц в одну в С++ Builder 6
Posted by obzor under c/c++, sql, Архив, Топик-обзор
Имеется:
1. База данных преподавателей и студентов в MS SQL Server 2005
2. В ней находится 5 таблиц: Факультеты, Группы, Преподаватели, Предметы и Основная.
3. Поля в первых 4 таблицах соответствуют их названиям (не считая целочисленные ключевые поля-идентификаторы). В них просто перечислены все группы, все преподаватели, все предметы и все факультеты
4. Последняя таблица состоит из 4 полей с теми же именами
Задача:
При введении данных в поля Основной таблицы необходимо обеспечить подстановку из таблиц Факультеты, Группы, Преподаватели и Предметы в соответствующие поля, т.е. чтобы не вводить полностью имя препода, который ведёт один из своих предметов у определённой группы на таком-то факультете, а обеспечить возможность выбора данных из динамически формирующегося списка при, скажем, установке курсора в нужное поле (это вообще было бы идеально), т.е. как в конструкторе — собрать Основную таблицу по деталям из четырёх других.
Поскольку связь в Основной таблице идёт многие ко многим, то, пожалуй, будет надобность создавать промежуточные таблицы
Вопрос:
Существуют ли способы, какие-либо select-запросы или ещё что-то, чтобы это можно было осуществить?
Смотрите в сторону LEFT/RIGHT/INNER JOIN
На примере твоей БД(если я правильно понял структуру)
table_fak — Факультеты (поле названия name)
table_group — Группы (поле названия name)
table_prep — Преподы (поле названия fio)
table_pred — Предметы (поле названия title)
table_main — Основная
Пусть ключевые поля везде будут ID (автоинкремент), а поля со связями на таблицу <имя_таблицы_id>, например table_prep_id.
Все примеры для MySQL. Для MS SQL Server их необходимо соответственно подправить
Тогда запрос на выборку будет таким (ну, в сильно упрощенном варианте)
SELECT fak.name AS 'Факультет', t_group.name AS 'Группа', prep.fio AS 'Предод', pred.title
AS 'Предмет'
FROM table_main main
INNER JOIN table_fak fak ON main.table_fak_id = fak.id
INNER JOIN table_group t_group ON main.table_group_id = t_group.id
INNER JOIN table_prep prep ON main.table_prep_id = prep.id
INNER JOIN table_pred pred ON main.table_pred_id = pred.id
Результат (выведет все записи) у меня их три.
+-----------+-----------+--------------+---------------+
| Факультет | Группа | Предод | Предмет |
+-----------+-----------+--------------+---------------+
| IT | Programer | Vasya Pupkin | C++ language |
| IT | Programer | Ivanov Ivan | C++ language |
| Builder | Designer | Ivanov Ivan | Photoshop CS2 |
+-----------+-----------+--------------+---------------+
При таком запросе, некоторого факультета будет примерно таким. Данные о факультете IT
SELECT fak.name AS 'Факультет', t_group.name AS 'Группа', prep.fio AS 'Предод', pred.title
AS 'Предмет'
FROM table_main main
INNER JOIN table_fak fak ON main.table_fak_id = fak.id
INNER JOIN table_group t_group ON main.table_group_id = t_group.id
INNER JOIN table_prep prep ON main.table_prep_id = prep.id
INNER JOIN table_pred pred ON main.table_pred_id = pred.id
WHERE
fak.name = "IT";
Выведет
+-----------+-----------+--------------+--------------+
| Факультет | Группа | Предод | Предмет |
+-----------+-----------+--------------+--------------+
| IT | Programer | Vasya Pupkin | C++ language |
| IT | Programer | Ivanov Ivan | C++ language |
+-----------+-----------+--------------+--------------+
При таком. Все предметы которые ведет Ivanov
SELECT fak.name AS 'Факультет', t_group.name AS 'Группа', prep.fio AS 'Предод', pred.title
AS 'Предмет'
FROM table_main main
INNER JOIN table_fak fak ON main.table_fak_id = fak.id
INNER JOIN table_group t_group ON main.table_group_id = t_group.id
INNER JOIN table_prep prep ON main.table_prep_id = prep.id
INNER JOIN table_pred pred ON main.table_pred_id = pred.id
WHERE
prep.fio LIKE "%Ivanov%";
+-----------+-----------+-------------+---------------+
| Факультет | Группа | Предод | Предмет |
+-----------+-----------+-------------+---------------+
| IT | Programer | Ivanov Ivan | C++ language |
| Builder | Designer | Ivanov Ivan | Photoshop CS2 |
+-----------+-----------+-------------+---------------+
Как видно из примеров достаточно подставить нужное условие в WHERE и запрос выведет необходимые данные.
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)