Добавление данных Geo-IP в запрос в Access SQL

Хорошо, это звучит как проблема, которую уже должен был решить кто-то другой, но я не могу найти какую-либо помощь по этому поводу, просто это должен быть лучший способ сделать это, чем использование неравного соединения.

У меня есть файл журнала информации о сеансе с исходным IP-адресом, и я пытаюсь создать запрос, который фактически выполняется, чтобы объединить файл журнала с данными Geo-IP, чтобы указать БД, откуда пользователи подключаются. моя первая попытка пришла к этому:-

SELECT coco, region, city
FROM GT_Geo_IP
WHERE (IP_Start <= [IntIP] AND IP_End >=[IntIP])
ORDER BY IP_Start;

Казалось, что он работает довольно быстро и возвращает правильную запись для данного IP. но когда я попытался объединить это с данными журнала, вот так:

SELECT T.IP,G.coco,G.region, g.city
FROM GT_Geo_IP as G, Log_Table as T
WHERE G.IP_Start <= T.IntIP AND G.IP_End >= T.IntIP
ORDER BY T.IP;

он блокирует доступ более чем на 45 минут (привязывая одно из моих процессорных ядер), прежде чем я наконец решу, что мне нужен какой-то процессор, или я действительно должен попробовать что-то еще. Из охоты вокруг, и это на самом деле медленнее, чем я понимаю, я нашел эту статью и проиндексировал как IP_Start, так и IP_End для оптимизации поиска, и на основе этого придумал следующее:-

SELECT TOP 1 coco, region, city
FROM GT_Geo_IP
WHERE G.IP_Start >= [IntIP]
ORDER BY G.IP_Start; 

Но с моими навыками SQL я не могу понять, как объединить это с моими данными журнала.

По сути, вопрос заключается в том, как использовать лучший метод с данными журнала, чтобы получить требуемый результат? или есть лучший способ сделать это?

Данные GeoIP взяты из LITE-DB3 IP2Location

Я думал о вложенных запросах, но я не мог понять, как его создать, я думал об использовании VBA, но я не уверен, что это будет быстрее

1 ответ

@EnviableOne

Пожалуйста, попробуйте этот оператор SQL.

SELECT
L.IP,
(
SELECT TOP 1
CONCAT(coco, ', ', region, ', ', city)
FROM
GT_Geo_IP
WHERE
IP_Start >= L.intIP ORDER BY IP_Start
) AS Location
FROM
Log_Table AS L;
Другие вопросы по тегам