Форум: "Базы";
Текущий архив: 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