powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Join не по всему полю
33 сообщений из 33, показаны все 2 страниц
Join не по всему полю
    #32227570
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть 2 таблицы
Табл1 (ID,Value1) - записей немного
Табл2 (Value2) - Записей много.
и функция F
Надо из Табл2 отобрать такие, что Value1=F(Value2)

Сделано криво:
strSQL1=select F(Табл2) as Result from Табл2
strSQL2=select (Табл1.ID) where (Табл1.Value1) in (strSQL1)

Как бы Вы красиво решили эту проблему?
...
Рейтинг: 0 / 0
Join не по всему полю
    #32227575
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Corr
"Из табл1 отобрать такие"
...
Рейтинг: 0 / 0
Join не по всему полю
    #32227607
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
select t1.* from table1 as t1 inner join 
 (select F(t2.value2)  as Result from table2 as t2) as tt
on t1.value1=tt.result
...
Рейтинг: 0 / 0
Join не по всему полю
    #32227608
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотелось бы сделать типа
select Табл1.ID from Табл1 innerJoin Табл2 on Табл1.Value1=F(Табл2.Value2)
Но такое, наверное, работать не будет...
...
Рейтинг: 0 / 0
Join не по всему полю
    #32227612
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
select Табл1.ID from Табл1, Табл2 where Табл1.Value1=F(Табл2.Value2)
...
Рейтинг: 0 / 0
Join не по всему полю
    #32227616
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ящериц-варан

А ты попробуй и скажи, будет работать или нет
Блин, сложно что-ли уже написанный (в форум) вопрос в аксес засунуть? Прежде чем вопросы на весь инет задавать?
ахереть легче

Блин, что за люди живут в поселке андреевка?
...
Рейтинг: 0 / 0
Join не по всему полю
    #32227618
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Join будет быстрее работать чем where?
...
Рейтинг: 0 / 0
Join не по всему полю
    #32227627
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох Позорный,
Да, лодыри тут, в основном, проживают.
...
Рейтинг: 0 / 0
Join не по всему полю
    #32227635
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIG, Владимир Саныч, спасибо, завтра потестирую на скорость все варинты. Проблема в том, что с подзапросом работает очень медленно...
...
Рейтинг: 0 / 0
Join не по всему полю
    #32227636
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нескромный вопрос
Varan=wara???
...
Рейтинг: 0 / 0
Join не по всему полю
    #32227640
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIG
Да, чтоб не было вопросов насчет половой принадлежности.
...
Рейтинг: 0 / 0
Join не по всему полю
    #32250629
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во прикол вариант VIG работает в 20 раз быстрее!

Данные о тестовых таблицах:
Табл 1 - 256 строк
Табл 2 - 13 128 строк

Вариант1 (42 секунды)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
dim strSql1 as string
Dim strSQL as string

strSql1=strSQL1=select F(Табл2.Value2) as Result from Табл2 
strSQL2=select (Табл1.ID) where (Табл1.Value1) in (strSQL1) 
CurrentDb.Execute strSQL



Вариант 2 (2 секунды)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Dim qdTemp As QueryDef
Dim qdfName As String
Dim strSql1 as string
Dim strSQL as string

strSql1=strSQL1=select F(Табл2.Value2) as Result from Табл2

'Название временного запроса
qdfName = "tempNumber"

 'Создать временный запрос
Set qdTemp = CurrentDb.CreateQueryDef(qdfName, strSQL1)
'Закрыть TableDef
   qdTemp.Close

      strSQL = "Select Табл1.ID from Табл1"
      strSQL = strSQL & " INNER JOIN " & qdfName & " on Табл1.Value1="
      strSQL = strSQL & qdfName & ".Value2 "
      strSQL = strSQL & "SET tmpNewFiles.flagNew=true"

'Выполнить запрос и убить временый запрос
docmd.runsql(strSQL)
DoCmd.DeleteObject acQuery, qdfName



Интересно, почему такая разница, ведь ничего, по сути, не изменилось!?
...
Рейтинг: 0 / 0
Join не по всему полю
    #32250647
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вариант Саныча проверял?
...
Рейтинг: 0 / 0
Join не по всему полю
    #32250649
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedd,
Нет
...
Рейтинг: 0 / 0
Join не по всему полю
    #32250653
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я думаю join будет работать также как и where, пользоваться индексами в подзапросах/приджоиненных таблицах, а in ими пользоваться не может, поэтому работает медленно
...
Рейтинг: 0 / 0
Join не по всему полю
    #32250655
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
впрочем, насчет индексов я погорячился... там же F(ttt), какой индекс..
...
Рейтинг: 0 / 0
Join не по всему полю
    #32250666
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант Саныча - вообще не то, что надо, выдает :-( (Хотя и быстро)
...
Рейтинг: 0 / 0
Join не по всему полю
    #32250670
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, Варинт Саныча - 2 минуты 50 секунд ( возвращает то, что надо), но он проще, надо было его и делать...
...
Рейтинг: 0 / 0
Join не по всему полю
    #32250676
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотелось бы услышать комментарии - из за чего такая разница (в 20 раз) в скорости?
...
Рейтинг: 0 / 0
Join не по всему полю
    #32250703
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос с IN ,как правило,всегда работает медленнее,чем с JOIN
...
Рейтинг: 0 / 0
Join не по всему полю
    #32250707
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так как правило или всегда ?
...
Рейтинг: 0 / 0
Join не по всему полю
    #32250708
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С чем связана такая ошеломительная разница?
...
Рейтинг: 0 / 0
Join не по всему полю
    #32250736
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так как правило или всегда?
Забыл написать-нужное подчеркнуть
...
Рейтинг: 0 / 0
Join не по всему полю
    #32250983
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, не знает никто.
Я опечален :-(
...
Рейтинг: 0 / 0
Join не по всему полю
    #32251002
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть мнение:
видимо в первом варианте он вызывает подзапрос для каждой строки и потому
тормозит.
а во-втором варианте у тебя Ас запрос, который либо
вызывается однажды, либо (что скорее всего) хорошо кэшируется.
Отсюда и такая разница.
имхо.
...
Рейтинг: 0 / 0
Join не по всему полю
    #32251018
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sasha_1,
Если бы подзапрос отрабатывал для каждой строчки первой таблицы, все это дело работало бы не в 20, а в 256 раз медленнее :-)
...
Рейтинг: 0 / 0
Join не по всему полю
    #32251027
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>не в 20, а в 256 раз медленнее :-)
не факт.
он может один раз засосать данные в память и потом 256 раз его прогнать в
памяти. получится
1 раз долго и 256 быстро
-------------------------
1раз долго
=
итого (почему бы и нет) в 20 раз.
...
Рейтинг: 0 / 0
Join не по всему полю
    #32251031
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Varan
sasha_1 приблизительно правильно сказал... даже если он каждый раз не каждый раз выполняется, то как минимум для каждой строки просматриваеться...
...
Рейтинг: 0 / 0
Join не по всему полю
    #32251032
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Saha1_1,
Пойду у соседей спрошу.
...
Рейтинг: 0 / 0
Join не по всему полю
    #32251041
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Varan:
а соседи у нас кто?
...
Рейтинг: 0 / 0
Join не по всему полю
    #32251071
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СКУЛ сервер
...
Рейтинг: 0 / 0
Join не по всему полю
    #32251116
Мимо пробегал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надо научиться определять на глаз запросы считающиеся ~ N (простые, или с вложенными селектами, но без условий в них по полям "внешнего") и ~ N*N (и более - когда условия внешнего селекта по каждой строке ДОЛЖНЫ в момент исполнения передаваться во внутренний - т.е. внутренний должен пересчитываться для каждого набора "параметров" - полей сравнения из внешнего). Время исполнения разбивается в свою очередь на время дисковых операций, и время счета (если оперативки хватает, и промежутки не надо укладывать на диск), дисковых операций (наиболее медленная часть "обычного" запроса) примерно одинаково для "обычного" и квадратичного (скажем ~ 2 с) а "расчетных" в сложном больше ~ 256 раз (на самом деле там еще и упаковку "каждого" элементарного надо иначе обрабатывать) Скажем, это и занимает 40 с. Оценить время "собственно расчета" первого можно поделив 40/256. На самом же деле там есть и некоторые другие компоненты времени выполнения - напр. интерпретация ("составление плана"). Она может занимать отнюдь не маленькое время.
...
Рейтинг: 0 / 0
Join не по всему полю
    #32251124
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимо пробегал,
Где про это можно почитать?
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Join не по всему полю
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]