сценарий:
у вас есть две таблицы: login_log
и ip_location
. Цель состоит в том, чтобы идентифицировать все IP -адреса, записанные в login_log
, что не присутствует в ip_location
.
SQL Solutions:
]несколько подходов SQL могут достичь этого. Давайте рассмотрим три общих метода:
] не существует
subquery: Этот метод обычно эффективен и широко совместим.
SELECT ip
FROM login_log
WHERE NOT EXISTS (
SELECT 1
FROM ip_location
WHERE login_log.ip = ip_location.ip
);
Этот запрос проверяет, если каждый IP -адрес в login_log имеет соответствующую запись в
ip_location . Если совпадение не найдено, IP -адрес включен в результаты. Обратите внимание, что
select 1 часто более эффективен, чем
select ip в подведении.
]
Left join с
null проверить:
] Этот подход использует reak quip , чтобы объединить таблицы, затем фильтры для строк, где
ip in in in in in inull
inull ]
select L.ip
От login_log l
Левый соединение ip_location i на l.ip = i.ip
Где i.ip null;
SELECT l.ip
FROM login_log l
LEFT JOIN ip_location i ON l.ip = i.ip
WHERE i.ip IS NULL;
minus в некоторых базах данных): Эта основанная на сборе операция непосредственно находит разницу между IP-адресами в двух таблицах. Обратите внимание, что синтаксис может немного отличаться в зависимости от вашей конкретной системы баз данных (например,
minus в Oracle).
]
выберите IP из login_log
КРОМЕ
Выберите IP из ip_location;
SELECT l.ip
FROM login_log l
LEFT JOIN ip_location i ON l.ip = i.ip
WHERE i.ip IS NULL;
Соображения по производительности: Оптимальный метод зависит от вашей системы базы данных, размера таблицы и индексации. не существует часто хорошо работает в PostgreSQL, в то время как
Left join может быть эффективным в других системах. кроме
может быть кратким, но не всегда может быть самым быстрым. Избегайте не в
с подтех, так как это может быть значительно медленнее, особенно с большими наборами данных. Соответствующая индексация в столбце ip
в обеих таблицах имеет решающее значение для производительности во всех случаях. ]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3