![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрос 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