SQL запрос из дочерней таблицы
От: binom82 Россия  
Дата: 07.07.09 01:40
Оценка:
Есть главная таблица
Пользователи:
ID , Фамилия поля таблицы

Есть дочерняя таблица
Описания:
ID,
Описание

Таблица Пользователи связана с таблицей Описания связью один-к-одному по полю ID (те не все пользователи имеют описание)


Скажите как быстрее всего произвести загрузку из этих таблиц.
На данный момент я делаю так


Выполняю хранимую процедуру и загружаю данные в приложение
select ID , Фамилия from Пользователи where <мое условие>

затем формирую новый запрос из всех ID предыдущего запроса

select ID , Описание from Описания where ID in(1,2,3,..................................................)
Тк данных очень много то второй запрос иногда не выполняется из-за нехватки памяти
Скажите можно ли это сделать быстрее и красивее.
Re: SQL запрос из дочерней таблицы
От: Grog13 Финляндия  
Дата: 07.07.09 03:55
Оценка:
Здравствуйте, binom82, Вы писали:

B>Есть главная таблица

B>Пользователи:
B>ID , Фамилия поля таблицы

B>Есть дочерняя таблица

B>Описания:
B>ID,
B>Описание

B>Таблица Пользователи связана с таблицей Описания связью один-к-одному по полю ID (те не все пользователи имеют описание)


B>Скажите как быстрее всего произвести загрузку из этих таблиц.

B>На данный момент я делаю так

B>Выполняю хранимую процедуру и загружаю данные в приложение

B>select ID , Фамилия from Пользователи where <мое условие>

B>затем формирую новый запрос из всех ID предыдущего запроса


B>select ID , Описание from Описания where ID in(1,2,3,..................................................)

B>Тк данных очень много то второй запрос иногда не выполняется из-за нехватки памяти
B>Скажите можно ли это сделать быстрее и красивее.

SELECT нужные поля 
FROM Пользователи
LEFT JOIN Описания ON Пользователи.ID = Описания.ID
WHERE твое условие


А почему бы не хранить "Описание" в первой таблице если у них 1 к 1?
Re: SQL запрос из дочерней таблицы
От: DenisCh Россия  
Дата: 07.07.09 04:06
Оценка:
Здравствуйте, binom82, Вы писали:

B>Есть главная таблица

B>Пользователи:
B>ID , Фамилия поля таблицы

B>Есть дочерняя таблица

B>Описания:
B>ID,
B>Описание
B>Таблица Пользователи связана с таблицей Описания связью один-к-одному по полю ID (те не все пользователи имеют описание)
B>Скажите как быстрее всего произвести загрузку из этих таблиц.
B>На данный момент я делаю так
B>Выполняю хранимую процедуру и загружаю данные в приложение
B>select ID , Фамилия from Пользователи where <мое условие>

B>затем формирую новый запрос из всех ID предыдущего запроса


B>select ID , Описание from Описания where ID in(1,2,3,..................................................)

B>Тк данных очень много то второй запрос иногда не выполняется из-за нехватки памяти
B>Скажите можно ли это сделать быстрее и красивее.


SELECT usv.ID, usv.Фамилия, ISNULL(descr.Description, "") AS Описание
from Пользователи usv
LEFT OUTER JOIN
Описания descr
ON usv.ID = descr.ID

Где-то так...
... Это наше fido ещё живо! (2:5030/830.57)
Re[2]: SQL запрос из дочерней таблицы
От: binom82 Россия  
Дата: 07.07.09 06:57
Оценка: -2
DC>SELECT usv.ID, usv.Фамилия, ISNULL(descr.Description, "") AS Описание
DC>from Пользователи usv
DC>LEFT OUTER JOIN
DC>Описания descr
DC>ON usv.ID = descr.ID

DC>Где-то так...


В одну таблицу объединять все нельзя. Дочерних таблиц на самом деле много, я привел просто самый простой пример
Re[3]: SQL запрос из дочерней таблицы
От: niteshade123  
Дата: 07.07.09 07:32
Оценка:
Здравствуйте, binom82, Вы писали:

B>В одну таблицу объединять все нельзя. Дочерних таблиц на самом деле много, я привел просто самый простой пример

Вам не предлагали объединять в одну таблицу
RTFM SQL Reference
Re[3]: SQL запрос из дочерней таблицы
От: DenisCh Россия  
Дата: 07.07.09 09:24
Оценка:
Здравствуйте, binom82, Вы писали:


B>В одну таблицу объединять все нельзя. Дочерних таблиц на самом деле много, я привел просто самый простой пример


Дык объединяйте то, что нужно... Я ж дал пример, как это делается по уму...
... Это наше fido ещё живо! (2:5030/830.57)
Re[4]: SQL запрос из дочерней таблицы
От: binom82 Россия  
Дата: 07.07.09 09:34
Оценка:
Здравствуйте, niteshade123, Вы писали:




N>Вам не предлагали объединять в одну таблицу

N>RTFM SQL Reference

А что вы тогда предлагаете? Поясните ссылку(справочник по sql я и сам найти могу)
А как получить результат с помошью операции join я и сам знаю. Только мне чета не охота вытаскивать
все поля дочерних таблиц из гавного запроса(их просто много)
Re[5]: SQL запрос из дочерней таблицы
От: niteshade123  
Дата: 07.07.09 09:37
Оценка:
Здравствуйте, binom82, Вы писали:

B>А что вы тогда предлагаете? Поясните ссылку(справочник по sql я и сам найти могу)

B>А как получить результат с помошью операции join я и сам знаю. Только мне чета не охота вытаскивать
B>все поля дочерних таблиц из гавного запроса(их просто много)

чего Вам хочется, а чего нет — ведомо только Вам, а нам Вы ничего не сообщили
что имеете под "вытаскивать все поля дочерних таблиц из гавного запроса" не ясно
ссылку на документацию дал, т.к. из начальной постановки Вашего вопроса подумалось, что Вы не знаете SQL
выполните предложенный скрипт и напишите точно, что именно в нем не устраивает
Re[6]: SQL запрос из дочерней таблицы
От: binom82 Россия  
Дата: 07.07.09 10:08
Оценка:
Здравствуйте, niteshade123, Вы писали:

Каждый результат запроса загужается в клиентсоком приложении в свой DataTable.
Если я солью все в один результат, тоя я умру все это потом делить, тем более что дочерних таблиц несколько.

Я хоте бы чтобы было примерно так (чтобы процедура возвращала несколько результатов select и по возможности не делала повторных вычислении)

create procedure
{
select ID , Фамилия from Пользователи where <мое условие> //Запрос из главной таблицы


//На этом этапе ID для поиска уже известны и я подумал что их можно както использовать, а не выполнять следующий запрос полностью

SELECT Описания.ID,Описания.Описание //Запрос из дочерней таблицы
FROM Пользователи
LEFT JOIN Описания ON Пользователи.ID = Описания.ID
WHERE <мое условие>


// и так далее....
}
о
Re[7]: SQL запрос из дочерней таблицы
От: niteshade123  
Дата: 07.07.09 10:13
Оценка:
Здравствуйте, binom82, Вы писали:
B>create procedure
B>{
B> select ID , Фамилия from Пользователи where <мое условие> //Запрос из главной таблицы


B> //На этом этапе ID для поиска уже известны и я подумал что их можно както использовать, а не выполнять следующий запрос полностью


B> SELECT Описания.ID,Описания.Описание //Запрос из дочерней таблицы

B> FROM Пользователи
B> LEFT JOIN Описания ON Пользователи.ID = Описания.ID
B> WHERE <мое условие>


B> // и так далее....

B>}
уже понятнее, спасибо

но всё ещё не ясно, чем не устраивает:

select u.id, 
       ref.name, ref2.name, ref3.name, ...
from users u
       left join reference ref
         on u.id = ref.u_id
       left join reference ref2
         on u.id = ref2.u_id
       left join reference ref3
         on u.id = ref3.u_id      
...
where <Ваше условие>
Re[7]: SQL запрос из дочерней таблицы
От: FilosOFF Россия  
Дата: 07.07.09 10:26
Оценка: +1
Здравствуйте, binom82, Вы писали:

B>Здравствуйте, niteshade123, Вы писали:


B>Каждый результат запроса загужается в клиентсоком приложении в свой DataTable.

B>Если я солью все в один результат, тоя я умру все это потом делить, тем более что дочерних таблиц несколько.

B>Я хоте бы чтобы было примерно так (чтобы процедура возвращала несколько результатов select и по возможности не делала повторных вычислении)


B>create procedure

B>{
B> select ID , Фамилия from Пользователи where <мое условие> //Запрос из главной таблицы


B> //На этом этапе ID для поиска уже известны и я подумал что их можно както использовать, а не выполнять следующий запрос полностью


B> SELECT Описания.ID,Описания.Описание //Запрос из дочерней таблицы

B> FROM Пользователи
B> LEFT JOIN Описания ON Пользователи.ID = Описания.ID
B> WHERE <мое условие>


B> // и так далее....

B>}
Моск взорван........
Хочу предложить Вам, поменять "справочник по sql" на большую кирпичную стену.
Простите за мою вежливость.
... << RSDN@Home 1.2.0 alpha 4 rev. 1231>>
Re[8]: SQL запрос из дочерней таблицы
От: binom82 Россия  
Дата: 07.07.09 10:58
Оценка:
Здравствуйте, niteshade123, Вы писали:


N>но всё ещё не ясно, чем не устраивает:


N>
N>select u.id, 
N>       ref.name, ref2.name, ref3.name, ...
N>from users u
N>       left join reference ref
N>         on u.id = ref.u_id
N>       left join reference ref2
N>         on u.id = ref2.u_id
N>       left join reference ref3
N>         on u.id = ref3.u_id      
N>...
N>where <Ваше условие>
N>


Не устраивает обработкой результата этого общего запроса в клиентском приложении.
Представляете если я солью все дочерние таблицы в один результат, сколько мне их потом нужно выделять в клинстком приложении
Re[9]: SQL запрос из дочерней таблицы
От: DenisCh Россия  
Дата: 07.07.09 15:28
Оценка:
Здравствуйте, binom82, Вы писали:

B>Представляете если я солью все дочерние таблицы в один результат, сколько мне их потом нужно выделять в клинстком приложении


Какие все дочерние? Что Вы там такое убойное курите?
... Это наше fido ещё живо! (2:5030/830.57)
Re[7]: SQL запрос из дочерней таблицы
От: sunshine Россия https://angel.ru/?src=rsdn
Дата: 07.07.09 22:50
Оценка:
Здравствуйте, binom82, Вы писали:

B>Я хоте бы чтобы было примерно так (чтобы процедура возвращала несколько результатов select и по возможности не делала повторных вычислении)


B>create procedure
B>{
B>   select ID , Фамилия from Пользователи where <мое условие> //Запрос из главной таблицы
B>  //На этом этапе ID для поиска уже известны и я подумал что их можно както использовать, а не выполнять следующий запрос полностью

select ID , Фамилия 
into #Temp
from Пользователи 
where <мое условие>

select *
from #Temp

SELECT Описания.ID,Описания.Описание 
FROM Описания 
WHERE Описания.ID in(select ID from #Temp)


B>  // и так далее....
B>}


Оно?
Принимаю платежи в любой валюте
Re[9]: SQL запрос из дочерней таблицы
От: _d_m_  
Дата: 08.07.09 05:05
Оценка:
Здравствуйте, binom82, Вы писали:

B>Не устраивает обработкой результата этого общего запроса в клиентском приложении.

B>Представляете если я солью все дочерние таблицы в один результат, сколько мне их потом нужно выделять в клинстком приложении

Re: SQL запрос из дочерней таблицы
От: Mr.Cat  
Дата: 10.07.09 12:10
Оценка:
Итак:
1. Есть мастер-таблица
2. Есть несколько деталей с отношением 1-1 к мастеру
3. Запрос master join detail1 join detail2 ... не катит (почему?)
4. Серия запросов master join detail1, master join detail2 ... не катит (почему?)
Re: SQL запрос из дочерней таблицы
От: ZAMUNDA Земля для жалоб и предложений
Дата: 10.07.09 13:49
Оценка:
Здравствуйте, binom82, Вы писали:

B>Есть главная таблица

B>Пользователи:
B>Есть дочерняя таблица
B>Описания:

Если у обоих таблиц на ID висит индекс, то JOIN (про который тебе уже рассказали) из двух этих таблиц будет быстрый пребыстрый. И быстрее чем то что ты вначале описал.
А какая БД?
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re[2]: SQL запрос из дочерней таблицы
От: binom82 Россия  
Дата: 12.07.09 01:22
Оценка:
Здравствуйте, ZAMUNDA, Вы писали:
ZAM>А какая БД?

SQL SERVER 2005
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.