powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Join не по всему полю
25 сообщений из 33, страница 1 из 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
25 сообщений из 33, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Join не по всему полю
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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