С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 19.04.2015
Сообщений: 25

Запрос sql по поиску из нескольких таблиц

08.11.2015, 13:09. Показов 1815. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Помогите пожалуйста понять, могу ли я сделать так или нужно переделать базу или такой поиск не возможно реализовать.
Пишу на delphi rad xe10.
Я пишу в таблицу Работники инф о работнике в одной строке,в размеры одежды тоже одна строка, а историю что ему выдавали (много строк и отличие только по ID_rab).

Хочу сделать поиск
что бы при запросе по фамилии или таб номеру мне выдавало инф:
О рабочем из первой табл в dbgrid1,
его размерах из второй табл в dbgrid2
и историю относящуюся к этому работнику из табл 3 (там может быть много строк имеющие только отличие по ID_rab) в dbgrid3

в первой таблице:
SQL
1
2
3
4
5
6
7
8
CREATE TABLE Работники
(
ID_Rab INT NOT NULL IDENTITY(1,1) PRIMARY KEY (ID_Rab),
 
ФИО VARCHAR(30),
 
Табель_номер VARCHAR(15),
);
во второй:
SQL
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE Размер
(
ID_razmOdejdi INT NOT NULL IDENTITY(1,1),
 
Одежды VARCHAR(4),
 
ID_rab INT,
PRIMARY KEY (ID_razmOdejdi),
FOREIGN KEY (ID_rab)
REFERENCES Работники,
);
в третей:
SQL
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE История
(
ID_story INT NOT NULL IDENTITY(1,1),
 
Наим_средств VARCHAR(15),
 
ID_rab INT,
PRIMARY KEY (ID_story),
FOREIGN KEY (ID_rab)
REFERENCES Работники,
);
Сделать сразу 3 ADOQuery с разными запросами?
Я не знаю как сделать что бы вывело информацию из другой таблице которая относиться к первой
Если бы можно было сделать так: ввел я в поиск человека его нашло и по его ID_rab нашло бы информацию в других таблицах и при этом вывести в 3 разных dbgrid.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.11.2015, 13:09
Ответы с готовыми решениями:

Sql запрос с использованием нескольких таблиц
Здравствуйте. помогите если не трудно, никак не могу сделать( точнее вообще не представляю как такое реализовать( есть база(структура...

SQL запрос, Count из нескольких таблиц
Здравствуйте, помогите написать один запрос для следующих таблиц: Пусть есть таблица персонала: Таблица: Staff +----+--------+ ...

Не работает SQL-запрос из нескольких таблиц
Только сильно не пинайте. Есть три таблицы: articles( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) CHARACTER SET...

9
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,850
Записей в блоге: 1
08.11.2015, 16:10
Лучший ответ Сообщение было отмечено Rogzar как решение

Решение

Rogzar, если вопрос в том как использовать компонент ADOQuery, то это лучше спрашивать на Delphi форyме. Если вопрос по SQL запросу, то уточни что именно тебе непонятно. Ведь в принципе задачу можно решить "в лоб" тремя запросами:
T-SQL
1
2
3
SELECT * FROM Работники WHERE ФИО='Петров'
SELECT * FROM Размер WHERE ID_rab = (SELECT TOP 1 ID_rab FROM Работники WHERE ФИО='Петров')
SELECT * FROM История WHERE ID_rab = (SELECT TOP 1 ID_rab FROM Работники WHERE ФИО='Петров')
1
0 / 0 / 0
Регистрация: 19.04.2015
Сообщений: 25
08.11.2015, 23:03  [ТС]
Эти запросы, то что доктор прописал)
Ещё вопросик интересный
В табл Работники есть ID_pol внешний ключ на таблицу
SQL
1
2
3
4
5
6
CREATE TABLE Пол
(
ID_pol INT NOT NULL IDENTITY(1,1),
Пол VARCHAR(1),
PRIMARY KEY (ID_pol),
);
я его использую в подстановочное поле для вставки 'М' и 'Ж' в программе.
При запросе на информацию о работнике, пол будет конечно отображаться как цифра 1 или 2.
Можно ли сделать запрос что бы выводила вместо 1 и 2 (М и Ж)?
Можно ли как то присвоит этим значениям буквы и при обнаружении цифры в этом столбце к примеру 2 вывело (М), а 1 (Ж)?
Что бы видеть полную информации об сотруднике и с таким отображением к примеру:
Васильев М
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,850
Записей в блоге: 1
08.11.2015, 23:19
Цитата Сообщение от Rogzar Посмотреть сообщение
Эти запросы, то что доктор прописал)
Не совсем. Они делают свою работу, но не очень эффективно т.к. мы три раза обращаемся к одной и той же таблице. Возможно SQL догадается закешировать результат запроса к таблице Работники, но я бы не стал на это полагаться и сохранил бы ID_rab в переменную.

Цитата Сообщение от Rogzar Посмотреть сообщение
Можно ли сделать запрос что бы выводила вместо 1 и 2 (М и Ж)?
Можно. С помощью JOIN.

P.S. У тебя используется очень странная схема именования. Часть называется по русски, часть в транслите. Выглядит это ужасно. Выбери одну нормальную схему именования: все на русском или все на английском. Никакого транслита!
1
0 / 0 / 0
Регистрация: 19.04.2015
Сообщений: 25
08.11.2015, 23:40  [ТС]
Я просто отображаю только русские наименования, а английские скрываю (такие как Id_rab человеку не зачем видеть)

Насчёт М и Ж.
У меня табл

SQL
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE Положено
(
ID_Polojeno INT NOT NULL IDENTITY(1,1),
Наим_ср_инд_защ VARCHAR(15),
ID_rab INT,
ID_Sredstva INT,
PRIMARY KEY (ID_Polojeno),
FOREIGN KEY (ID_Sredstva)
REFERENCES Классификация_средств,
FOREIGN KEY (ID_rab)
REFERENCES Работники,
);
и
SQL
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE История
(
ID_story INT NOT NULL IDENTITY(1,1),
Наим_средств VARCHAR(15),
ID_rab INT,
ID_Sredstva INT,
PRIMARY KEY (ID_story),
FOREIGN KEY (ID_Sredstva)
REFERENCES Классификация_средств,
FOREIGN KEY (ID_rab)
REFERENCES Работники,
);
связаны с
SQL
1
2
3
4
5
CREATE TABLE Классификация_средств
(
ID_Sredstva INT NOT NULL IDENTITY(1,1) PRIMARY KEY (ID_Sredstva),
Класс_ыя_средств VARCHAR(15),
);
Классификацию при заполнении пользователь выбирает из списка, а вот при выводе информации уже цифирьки. Я поэтому про М и Ж спросил одинаковая ситуация.

Помогите пожалуйста составить запрос для М и Ж, если можете.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,850
Записей в блоге: 1
08.11.2015, 23:47
Цитата Сообщение от Rogzar Посмотреть сообщение
Помогите пожалуйста составить запрос для М и Ж, если можете.
Мне несложно, но советую изучить основы SQL чтобы не тратить время на элементарные вопросы.
T-SQL
1
2
3
4
5
SELECT
    ФИО, Пол
FROM
    Работники
    JOIN Пол ON Пол.ID_pol = Работники.ID_pol
Цитата Сообщение от Rogzar Посмотреть сообщение
Я просто отображаю только русские наименования, а английские скрываю (такие как Id_rab человеку не зачем видеть)
Еще одна ошибка. Не надо локализовывать приложение с помощью русских названий колонок в БД.
1
0 / 0 / 0
Регистрация: 19.04.2015
Сообщений: 25
08.11.2015, 23:52  [ТС]
Это может вызвать системные ошибки?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,850
Записей в блоге: 1
08.11.2015, 23:53
Rogzar, это усложнит развитие приложения.
1
0 / 0 / 0
Регистрация: 19.04.2015
Сообщений: 25
09.11.2015, 00:07  [ТС]
Написал:
SQL
1
2
3
SELECT ФИО, ID_Pol
FROM Работники JOIN Пол ON Пол.ID_pol = Работники.ID_Pol
WHERE ФИО LIKE ''%'+Edit1.Text+'%''
Пишет ' Неоднозначное имя столбца "ID_Pol".
Я что-то перепутал?

Добавлено через 3 минуты
извиняюсь напутал

Добавлено через 10 секунд
нашел свою ошибку

Добавлено через 5 минут
А если удалить полностью всю информацию об сотруднике его размерах, истории и положено, это можно сделать через один запрос?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,850
Записей в блоге: 1
09.11.2015, 16:24
Цитата Сообщение от Rogzar Посмотреть сообщение
А если удалить полностью всю информацию об сотруднике его размерах, истории и положено, это можно сделать через один запрос?
Если на таблице Работники разрешить каскадное удаление, то удаление строки в ней приведет к удалению данных из подчиненных таблиц. Иначе придется делать несколько DELETE запросов.

Добавлено через 14 часов 31 минуту
Цитата Сообщение от Rogzar Посмотреть сообщение
WHERE ФИО LIKE ''%'+Edit1.Text+'%''
Подобный код уязвим к атакам под названием "внедрение SQL". Следует использовать запросы с параметрами.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.11.2015, 16:24
Помогаю со студенческими работами здесь

Доработать sql - запрос с выборкой из нескольких таблиц
Есть 3 таблицы все они связаны с одной по одному и тому же полю. Создал sql - запрос на выборку полей из этих таблиц. Запрос с...

SQL запрос через ADOQuery из нескольких таблиц
Здравствуйте! В общем, проблема такая.. Нужно мне составить отчет, который содержит данные из нескольких таблиц. С этим проблем нет,...

QuickRep с выводом нескольких таблиц через SQL запрос
Нужна помощь с отчетом в QuickRep с выводом с помощью нескольких таблиц. Есть две таблицы - Заказ и Спец_заказ, связываются по номеру...

Запрос из нескольких таблиц с категориями SQL Access 2007
Здравствуйте уважаемые посетители форума! Разрабатываю базу данных специфического кадрового учета в войсковой части на Access 2007. В...

SQL запрос в VBA на выборку данных из нескольких таблиц mdb
Добрый день. Есть база mdb с несколькими таблицами: Регистр - общая таблица с хранением операций деятельности предприятия. Поля...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru