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

Вниз

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

 
fedor   (2005-07-11 00:59) [0]

Две таблицы r и к. IBDataset. Соединяю следующим образом: select * from k where id=:id; в свойствах датасета для к DataSource:DataSource_таблицы_r. Все работает отлично, только при большом количестве записей тормозит.
Решил изменить запрос на следующий:
select k. * from k, r where (k.id=r.id) order by kdate.
Не соединяет. Показывает тупо все записи. Почему?


 
dmitry501 ©   (2005-07-11 05:23) [1]

fedor   (11.07.05 0:59)
Что бы не тормозило, оптимизировать индексы (читать ibase.ru)
Так же не помешает в учебнике по SQL почитать про JOIN


 
fedor   (2005-07-11 06:09) [2]

Да в других книгах не меньше, но там точно такой же запрос в примере и про join ни слова. Ты мне лучше скажи, прожалуйста, где в запросе ошибка.


 
Deniz ©   (2005-07-11 06:13) [3]

>fedor
>Не соединяет.
Что значит не соединяет?

>Показывает тупо все записи.
А что ты хочешь увидить?
Твой запрос и должен показать ВСЕ записи.


 
fedor   (2005-07-11 06:23) [4]

Deniz, я ж про то и говорю, но в книге, причем уважаемой, такой запрос как основной пример и других вариантов нет. А увидеть я хочу все записи из таблы k, чьи id соответствуют выбранной записи  из таблы r.


 
Anatoly Podgoretsky ©   (2005-07-11 09:12) [5]

Соединением и не пахнет.


 
dolmat   (2005-07-11 09:17) [6]

select k..naim1, k.naim2, r.naim1, r.naim1 from k k
left join r r on (k.id=r.id)
order by kdate.


 
Deniz ©   (2005-07-11 14:01) [7]

>dolmat
Не надо путать человека.
Запрос выдаст все записи из k независимо от того есть ли соответствие по id в r.

>fedor
Тут вариант такой:
при перемещении указателя с записи на запись, компоненты посылают запрос на сервер вида select * from k where id=1(берется автоматически из текущей записи). И если ты хочешь пролистать несколько записей либо жди выполнения каждого запроса, либо реализуй самостоятельно задержку перед выполнением запроса, и если юзер не перескачил на другую запись, то выполняй запрос, либо используй FIBPlus, где все это и еще много чего раелизовано.


 
Val ©   (2005-07-11 14:14) [8]

>fedor   (11.07.05 00:59)
Ваш новый запрос показывает все записи таблицы , потому что в таблице r есть все id, которые встречаются в k.
Вам же нужен, насколько я понимаю, запрос, который возвратит все записи из k, у которых id = id текущей записи из r. Это мастер-дитейл связь. Реализуется она либо так как у вас было раньше, либо обработкой событий перехода от записи к записи в r и переоткрытии к с передачей ему r.id в виде параметра.
А тормоза, скорее всего, просто из-за отсутствия индекса.


 
dolmat   (2005-07-11 15:09) [9]

>Deniz ©   (11.07.05 14:01) [7]
Не нравится left join r r on (k.id=r.id)
замени на inner join r r on (k.id=r.id)
и будет как нужно


 
evvcom ©   (2005-07-11 15:17) [10]


> dolmat   (11.07.05 15:09) [9]

да не это ему нужно, что ты никак не поймешь?


 
Deniz ©   (2005-07-11 15:21) [11]

>dolmat
Кому нужно?
inner join и select k. * from k, r where k.id=r.id практически один и тот же запрос, а он автора не устраивает. Автору нужен мастер-деталь. [7] и [8] попытались объяснить что к чему.


 
dolmat   (2005-07-11 15:35) [12]

Да я действительно немного невнимательно прочитал.
Скорость добавят только индексы и оставить все как было в >вопросеДве таблицы r и к. IBDataset. Соединяю следующим образом: select * from k where id=:id; в свойствах датасета для к DataSource:DataSource_таблицы_r. Все работает отлично, только при большом количестве записей тормозит.


 
fedor   (2005-07-11 19:47) [13]

Всем спасибо. Обычно посылают с таким вопросом :),а тут все конструктивно. Сразу видно- форум профессионалов.



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

Форум: "Базы";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.031 c
4-1117471883
Terech
2005-05-30 20:51
2005.08.21
Запуска файла ДОС под Win9x


4-1119704859
vlk2005
2005-06-25 17:07
2005.08.21
Информация об установленное оборудование на компьютерах в ЛВС ?


5-1093430251
iBitmap
2004-08-25 14:37
2005.08.21
Добавить свойство Caption.


14-1122409786
Piter
2005-07-27 00:29
2005.08.21
2 * 2 = 5


8-1113485801
vayrus
2005-04-14 17:36
2005.08.21
Windows.Beep





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский