|
|
|
Помогите разобраться с запросом (возможно, JOIN)
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Прошу помочь в решении проблемы с извлечением данных сразу из нескольких таблиц. Я плохо знаком с SQL-запросами семейства "JOIN"(а я думаю, что решение моей проблемы ПРАВИЛЬНО реализуется именно посредством JOIN-запроса), поэтому обращаюсь к вам. Пример. Есть 3 таблицы - смотрите их здесь - это удобнее: http://www.study.ua/sql-sample.htm Для примера, возьмём Леопольда: исходя из данных его полей ГОРОД и ДОЛЖНОСТЬ: "Леопольд" живёт в городе "Питер" и работает на должности "стажер". Я легко могу выполнить запрос: select * from Люди where имя='Леопольд' и получу результат: 'Леопольд', 1, 2 А как мне объеденить запрос с таблицами городов и должностей, чтобы получить следующий результат?: 'Леопольд', 'Питер', 'стажер' У меня есть своя реализация решения этого вопроса(без JOIN и вложенных запросов - достаточно громоздкая), однако, мне кажется, что правильнее всего реализовать выборку с помощью JOIN - подскажите, пожалуйста, как? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 01:24 |
|
||
|
Помогите разобраться с запросом (возможно, JOIN)
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 13:11 |
|
||
|
Помогите разобраться с запросом (возможно, JOIN)
|
|||
|---|---|---|---|
|
#18+
roman_lenko, select t1.имя, t2.название, t3.название from Люди as t1 left join города as t2 on t1.город=t2.ид left join должности as t3 on t1.должность=t3.ид where t1.имя='Леопольд' ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 13:52 |
|
||
|
Помогите разобраться с запросом (возможно, JOIN)
|
|||
|---|---|---|---|
|
#18+
И собственно непонял - почему вопрос в теме проектирования БД ? Как по мне в вопрос-ответ самое место. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 13:53 |
|
||
|
Помогите разобраться с запросом (возможно, JOIN)
|
|||
|---|---|---|---|
|
#18+
Злой Бобрselect t1.имя, t2.название, t3.название from Люди as t1 left join города as t2 on t1.город=t2.ид left join должности as t3 on t1.должность=t3.ид where t1.имя='Леопольд' ... Спасибо! Попробую. Еще такой вопрос - сильно ли снижает быстродействие большое количество JOIN'ов в запросе? - не быстрее(в плане быстродействия) ли будет написать хранимую процедуру(чтобы скрыть громоздкость) состоящую, например, из нескольких SELECT'ов? - чисто на вскидку. Злой БобрИ собственно непонял - почему вопрос в теме проектирования БД ? Как по мне в вопрос-ответ самое место. Честно говоря, мне этот раздел показался наиболее подходящим - "Вопрос-ответ" я, к сожалению, не заметил - так бы туда и написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 14:09 |
|
||
|
Помогите разобраться с запросом (возможно, JOIN)
|
|||
|---|---|---|---|
|
#18+
Злой БобрКак по мне в вопрос-ответ самое место. Самое место - раздел по используемой СУБД. Поскольку у каждой есть свои особенности. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 14:37 |
|
||
|
Помогите разобраться с запросом (возможно, JOIN)
|
|||
|---|---|---|---|
|
#18+
roman_lenko... сильно ли снижает быстродействие большое количество JOIN'ов в запросе? Любой джойн идет медленнее чем прямой селект из одной таблицы. Но реалии таковы что в большинстве случаев нельзя обойтись данными только одной таблицы. Поэтому следует помнить о разумном балансе производительности при создании архитектуры БД. roman_lenkoне быстрее(в плане быстродействия) ли будет написать хранимую процедуру(чтобы скрыть громоздкость) состоящую, например, из нескольких SELECT'ов? - чисто на вскидку. Чисто навскидку - хранимка будет использовать те же джойны. Так что тут вопрос скорее - где и как будет логика. Т.е. в приложении или в БД. Оба варианта имеют место быть, все зависит от конкретной задачи. Зачастую даже возможен смешанный вариант. Поскольку опыта у вас недостаточно - любой из вариантов вам подойдет. Со временем при желании разберетесь в плюсах и минусах. На данный момент я думаю вам это некритично. Если задача "боевая", то более важно сделать правильную архитектуру. Если учебная - читайте мануалы (методички), там должны быть пояснения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 17:06 |
|
||
|
Помогите разобраться с запросом (возможно, JOIN)
|
|||
|---|---|---|---|
|
#18+
roman_lenkoЕще такой вопрос - сильно ли снижает быстродействие большое количество JOIN'ов в запросе? - не быстрее(в плане быстродействия) ли будет написать хранимую процедуру(чтобы скрыть громоздкость) состоящую, например, из нескольких SELECT'ов? - чисто на вскидку.Если запросы одинаковые, то без разницы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 19:17 |
|
||
|
Помогите разобраться с запросом (возможно, JOIN)
|
|||
|---|---|---|---|
|
#18+
roman_lenkoЕще такой вопрос - сильно ли снижает быстродействие большое количество JOIN'ов в запросе? - не быстрее(в плане быстродействия) ли будет написать хранимую процедуру(чтобы скрыть громоздкость) состоящую, например, из нескольких SELECT'ов? - чисто на вскидку. Тогда уже лучше представление, его можно будет заюзать в других запросах (при необходимости). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 21:58 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38126300&tid=1541396]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 344ms |

| 0 / 0 |
