Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Вниз

Запрос 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.041 c
2-1157193066
pathfinder
2006-09-02 14:31
2006.09.24
Область видимости объекта.


4-1148406407
Донской
2006-05-23 21:46
2006.09.24
Двухголовая машина


15-1157356316
ANB
2006-09-04 11:51
2006.09.24
Понедельничная задачка (Оракл)


15-1157349637
pavel_guzhanov
2006-09-04 10:00
2006.09.24
Что-то непонятное с инсталляцией пакета


15-1157038248
Sergey Masloff
2006-08-31 19:30
2006.09.24
offtop:Меломаны, кому нужен бы Atomic Rooster? Их есть у меня





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский