Общие > Базы данных
Исключение выборки из двух таблиц
Phoinix:
Есть 2 таблицы:
1. Таблица, в которой одним из полей является число
2. Таблица, в которой 2 поля: минимальное число, максимальное число.
Вторая таблица - список диапазонов чисел для первой таблицы.
Я могу выбрать все значения первой таблицы попадающие в диапазон второй таблицы, но мне нужен обратный список - не попадающие:
При попытке запустить запрос:
SELECT t3.param1, count(t3.param1)
FROM table1 AS t1, table2 AS t2, table1 AS t3
WHERE t1.num >= t2.start_num AND
t1.num t2.end_num
GROUP BY t1.num
Ничего не выдает...
Макс:
могу предложить такой вариант
1. SELECT COUNT(*) FROM table2;
получим кол-во записей во второй таблице ($counts)
2.
--- Код: ---
SELECT t1.id, t1.num, COUNT(t1.id) as counts
FROM table1 t1, table2 t2
WHERE t1.num NOT BETWEEN t2.min AND t2.max
GROUP BY t1.id
HAVING counts = $counts;
--- Конец кода ---
Phoinix:
Макс
Нет... немного не так...
Есть таблица логов:
id | remote host | ...
Есть таблица диапазонов:
remote_host_min | remote_host_max | ...
Нужно сделать выборку всех записей из таблицы логов remote_host которых не соответствует ни одному из диапазонов второй таблицы
Выбрать все которые попадают - просто, а вот наоборот - неполучается
Макс:
а мой метод что возвращает ?
Phoinix:
Макс
--- Цитировать ---SELECT t1.id, t1.num, COUNT(t1.id) as counts
FROM table1 t1, table2 t2
WHERE t1.num NOT BETWEEN t2.min AND t2.max
GROUP BY t1.id
HAVING counts = $counts;
--- Конец цитаты ---
Формирует список в 20 раз больше исходного... :(
Только GROUP BY не по id а по num
Даже если точнее: количество записей есть произведение количества записей первой таблицы и количества записей второй таблицы...
Навигация
Перейти к полной версии