Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос SQL [D7, MySQL]


*Ray* ©   (2006-09-04 15:22:00) 

Доброе время суток, уважаемые Мастера!
У меня возникла проблема при составлении SQL-запроса. Имеется таблица People, которая содержит поля: ID, Name. Это таблица справочная. Также есть другая таблица Main, основная . В ней содержатся различные данные, в том числе о выполненных работах, конкретными людьми по конкретным датам. Например: там можно узнать допустим кто сходил в магазин, кто вымыл полы, кто приготовил ужин 1 сентября(утрирую). В Main не содержатся имена людей, а содержатся их ID из таблицы People. Я хочу отобразить в DBGride не ID людей, а их имена используя SQL-запрос компонента Query. Выцепить имя человека по одному роду деятельности я могу, а вот сразу по трем работам...
Select People.Surname
From Main, People
Where (Main.Kto_Uzhin=People.ID)
Буду очень благодарен! Заранее большое спасибо за помощь!


*Ray*   (2006-09-04 20:18:00) [1]

Большое всем спасибо за Ваши ответы! Я прислушался к Вашим советам, они очень помогли!


Desdechado   (2006-09-04 17:48:00) [2]

> *Ray* ©   (04.09.06 17:24) [16]
процитирую себя:
> SQL вообще и SQL в приложении к своему серверу.

А вообще по структуре процитирую себя же еще раз:
> теорию построения БД, правила нормализации

Понадобится, кто цветы поливал или пыль вытирал, с собакой гулял или посуду мыл, так и будешь вправо таблицу расширять?


Рустем   (2006-09-04 17:30:00) [3]


> *Ray* ©

А ты не хочешь прислушаться к совету parovoZZ © [12]?
По моему, твоя структура не совсем удачная...


*Ray*   (2006-09-04 17:24:00) [4]


> Это уже другая, глобальная, проблема.
> Тогда OUTER JOIN поможет.

не могли бы Вы привести код запроса согласно структуре котрую я привел используя OUTER JOIN.


*Ray*   (2006-09-04 17:22:00) [5]


> Desdechado ©   (04.09.06 16:48) [11]
> Select P1.Surname, P2.Surname
> From Main M, People P1, People P2
> Where M.Kto_Uzhin=P1.ID AND M.Kto_Zavtrak=P2.ID
>
> алиасы выделены

Desdechado, спасибо все работает, но Anatoly Podgoretsky тоже прав, а если допустить что одно из значений принимает NULL то строка выпадает, а этого быть не должно.

Как быть в этой ситуации?
Структура Main:
Data - дата исполнения
Kto_Uzhin - ID человека из таблицы People
Kto_magazin - ID человека из таблицы People
Kto_Pol - ID человека из таблицы People
Primechanie - примечание

Структура People:
ID - ID человека
Name - имя человека

Нужно чтобы в DBGride вместо кодов человека, отображалось имя человека путем задания SQL - запроса.


Desdechado   (2006-09-04 17:14:00) [6]

Anatoly Podgoretsky ©   (04.09.06 16:56) [13]
Это уже другая, глобальная, проблема.
Тогда OUTER JOIN поможет.
А вообще согласен - читать-непережи(у)вать: теорию построения БД, правила нормализации, SQL вообще и SQL в приложении к своему серверу.


Anatoly Podgoretsky   (2006-09-04 16:56:00) [7]

Desdechado ©   (04.09.06 16:48) [11]
И не дай бог, что бы одно из значений не оказалось NULL, тут в книги нужно, Дельфи тут не пахнет.


parovoZZ   (2006-09-04 16:53:00) [8]

Я бы сделал три таблицы
1. Имена
2. Род работ
3. Кто и когда что сделал.


Desdechado   (2006-09-04 16:48:00) [9]

Select P1.Surname, P2.Surname
From Main M, People P1, People P2
Where M.Kto_Uzhin=P1.ID AND M.Kto_Zavtrak=P2.ID

алиасы выделены


*Ray*   (2006-09-04 16:41:00) [10]


> Desdechado ©   (04.09.06 15:43) [8]
> Одну и ту же таблицу можно соединять в запросе несколько
> раз с разными алиасами.

А не подскажете как создать алиас таблицы?


Anatoly Podgoretsky   (2006-09-04 16:18:00) [11]

ANB ©   (04.09.06 15:35) [4]
По задаче требуется LEFT OUTER JOIN, а неявный это INNER JOIN


Desdechado   (2006-09-04 15:43:00) [12]

Одну и ту же таблицу можно соединять в запросе несколько раз с разными алиасами.


ANB   (2006-09-04 15:41:00) [13]


> Anatoly Podgoretsky ©   (04.09.06 15:36) [6]

Дошло.
Автору неплохо бы перед написанием запроса изменить структуру таблиц.


Anatoly Podgoretsky   (2006-09-04 15:36:00) [14]

ANB ©   (04.09.06 15:35) [4]
У него JOIN но мало условий связи и мало полей вывода


Anatoly Podgoretsky   (2006-09-04 15:35:00) [15]

И еще такая метода задания вопроса, что бы ты помучался


ANB   (2006-09-04 15:35:00) [16]


> Anatoly Podgoretsky ©   (04.09.06 15:33) [2]

А разве у него не джойн ? (неявный)


Anatoly Podgoretsky   (2006-09-04 15:34:00) [17]

ANB ©   (04.09.06 15:33) [1]
Не дернет, у него три разных поля КТО - ну такая нормализация


ANB   (2006-09-04 15:33:00) [18]

Select Main.*, People.Surname
From Main, People
Where (Main.Kto_Uzhin=People.ID)

Этот запрос и так всех дернет.


Anatoly Podgoretsky   (2006-09-04 15:33:00) [19]

Для выборки по другому виду используй JOIN


Наверх

Титульная страница Поиск, карта сайта Написать письмо