Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.24;
Скачать: CL | DM;

Вниз

Запрос SQL   Найти похожие ветки 

 
*Ray* ©   (2006-09-04 15:22) [0]

Доброе время суток, уважаемые Мастера!
У меня возникла проблема при составлении 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)
Буду очень благодарен! Заранее большое спасибо за помощь!


 
ANB ©   (2006-09-04 15:33) [1]

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

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


 
Anatoly Podgoretsky ©   (2006-09-04 15:33) [2]

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


 
Anatoly Podgoretsky ©   (2006-09-04 15:34) [3]

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


 
ANB ©   (2006-09-04 15:35) [4]


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

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


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

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


 
Anatoly Podgoretsky ©   (2006-09-04 15:36) [6]

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


 
ANB ©   (2006-09-04 15:41) [7]


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

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


 
Desdechado ©   (2006-09-04 15:43) [8]

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


 
Anatoly Podgoretsky ©   (2006-09-04 16:18) [9]

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


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


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

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


 
Desdechado ©   (2006-09-04 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

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


 
parovoZZ ©   (2006-09-04 16:53) [12]

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


 
Anatoly Podgoretsky ©   (2006-09-04 16:56) [13]

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


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

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


 
*Ray* ©   (2006-09-04 17:22) [15]


> 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 - запроса.


 
*Ray* ©   (2006-09-04 17:24) [16]


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

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


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


> *Ray* ©

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


 
Desdechado ©   (2006-09-04 17:48) [18]

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

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

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


 
*Ray* ©   (2006-09-04 20:18) [19]

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



Страницы: 1 вся ветка

Текущий архив: 2006.09.24;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.031 c
2-1157009093
Yegorchic
2006-08-31 11:24
2006.09.24
Многострочные Item ы в ListView


2-1156783060
serko
2006-08-28 20:37
2006.09.24
Не добавляется запись в Firebird


15-1157462920
stud
2006-09-05 17:28
2006.09.24
народ а аська работает??


4-1148294168
capkoh
2006-05-22 14:36
2006.09.24
Предел SB_THUMBTRACK


2-1157266289
Mozgan
2006-09-03 10:51
2006.09.24
Числа