Я не эксперт Ipv6, но я думаю, что с этим можно получить довольно хороший результат:
^([0-9A-Fa-f]{0,4}:){2,7}([0-9A-Fa-f]{1,4}$|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4})$
ответить «это действительный ipv6», он выглядит как нормально для меня , Разбить его по частям ... забудьте об этом. Я пропустил неопределенный (: :), так как нет необходимости иметь «неуказанный адрес» в моей базе данных.
начало: ^([0-9A-Fa-f]{0,4}:){2,7}
& lt; - соответствие сжимаемой части, мы можем перевести это как: между 2 и 7 двоеточиями, которые могут иметь heaxadecimal число между ними.
, а затем : [0-9A-Fa-f]{1,4}$
& lt; - шестнадцатеричное число (начало 0 опущено) ИЛИ ((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}
& lt; - адрес Ipv4
ПЕРЕСЕКИТЕСЬ внутреннее объединение. МИНУС внешнее объединение, где Вы выбираете только записи, которые не существуют в другой таблице.
<час> ПЕРЕСЕКАЮТСЯselect distinct
a.*
from
a
inner join b on a.id = b.id
<час> МИНУС
select distinct
a.*
from
a
left outer join b on a.id = b.id
where
b.id is null
, Если Вы редактируете свой исходный вопрос и отправляете некоторые демонстрационные данные затем, пример может быть дан.
РЕДАКТИРОВАНИЕ: Забыл добавлять в отличном к запросам.
ПЕРЕСЕКИТЕСЬ не ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ. Они отличаются. ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ даст Вам дублирующиеся строки в случаях, где ПЕРЕСЕКАЮТСЯ, не БУДЕТ. Можно получить эквивалентные результаты:
SELECT DISTINCT a.*
FROM a
INNER JOIN b
on a.PK = b.PK
Примечание, что PK должен быть столбцом первичного ключа или столбцами. Если нет никакого PK на таблице (ПЛОХО!), необходимо записать это как так:
SELECT DISTINCT a.*
FROM a
INNER JOIN b
ON a.Col1 = b.Col1
AND a.Col2 = b.Col2
AND a.Col3 = b.Col3 ...
С МИНУС, можно сделать то же самое, но с ЛЕВЫМ СОЕДИНЕНИЕМ, и ГДЕ проверка условия пустой указатель на одном из не допускающих NULL-значения столбцов b таблицы (предпочтительно первичный ключ).
SELECT DISTINCT a.*
FROM a
LEFT JOIN b
on a.PK = b.PK
WHERE b.PK IS NULL
, Который должен сделать это.
Они сделаны через СОЕДИНЕНИЯ. Старомодный путь :)
Для ПЕРЕСЕКАЮТСЯ, можно использовать ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ. Довольно простой. Просто должен использовать GROUP BY или ОТЛИЧНЫЙ, если Вы имеете, не имеют чистого непосредственного продолжения отношений. Иначе, как другие упомянули, можно получить больше результатов, чем Вы ожидали бы.
Для МИНУС, можно использовать ЛЕВОЕ СОЕДИНЕНИЕ и использовать, ГДЕ ограничить его так, Вы только получаете задние ряды от своей основной таблицы, которые не имеют соответствия с ЛЕВОЙ Объединяемой таблицей.
Легкий peasy.
К сожалению, МИНУС не поддерживается в Доступе MS - одно обходное решение должно было бы создать три запроса, один с полным набором данных, тот, который вытягивает строки, которые Вы хотите отфильтровать, и одна треть, которая оставила соединения этими двумя таблицами и только вытягивает записи, которые только существуют в Вашем полном наборе данных.
То же самое идет для, ПЕРЕСЕКАЮТСЯ, кроме Вас сделал бы его через внутреннее объединение и только возвратил бы записи, которые существуют в обоих.