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

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

08.11.2015, 13:09. Показов 1836. Ответов 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
18292 / 14216 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 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
18292 / 14216 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 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
18292 / 14216 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 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
18292 / 14216 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 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
18292 / 14216 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru