Как я могу реализовать SQL, ПЕРЕСЕКАЮТСЯ и МИНУС операции в Доступе MS

Я не эксперт 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

21
задан Varun Mahajan 3 December 2008 в 13:54
поделиться

4 ответа

ПЕРЕСЕКИТЕСЬ внутреннее объединение. МИНУС внешнее объединение, где Вы выбираете только записи, которые не существуют в другой таблице.

<час> ПЕРЕСЕКАЮТСЯ
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

, Если Вы редактируете свой исходный вопрос и отправляете некоторые демонстрационные данные затем, пример может быть дан.

РЕДАКТИРОВАНИЕ: Забыл добавлять в отличном к запросам.

31
ответ дан 29 November 2019 в 20:13
поделиться

ПЕРЕСЕКИТЕСЬ не ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ. Они отличаются. ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ даст Вам дублирующиеся строки в случаях, где ПЕРЕСЕКАЮТСЯ, не БУДЕТ. Можно получить эквивалентные результаты:

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

, Который должен сделать это.

14
ответ дан 29 November 2019 в 20:13
поделиться

Они сделаны через СОЕДИНЕНИЯ. Старомодный путь :)

Для ПЕРЕСЕКАЮТСЯ, можно использовать ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ. Довольно простой. Просто должен использовать GROUP BY или ОТЛИЧНЫЙ, если Вы имеете, не имеют чистого непосредственного продолжения отношений. Иначе, как другие упомянули, можно получить больше результатов, чем Вы ожидали бы.

Для МИНУС, можно использовать ЛЕВОЕ СОЕДИНЕНИЕ и использовать, ГДЕ ограничить его так, Вы только получаете задние ряды от своей основной таблицы, которые не имеют соответствия с ЛЕВОЙ Объединяемой таблицей.

Легкий peasy.

3
ответ дан 29 November 2019 в 20:13
поделиться

К сожалению, МИНУС не поддерживается в Доступе MS - одно обходное решение должно было бы создать три запроса, один с полным набором данных, тот, который вытягивает строки, которые Вы хотите отфильтровать, и одна треть, которая оставила соединения этими двумя таблицами и только вытягивает записи, которые только существуют в Вашем полном наборе данных.

То же самое идет для, ПЕРЕСЕКАЮТСЯ, кроме Вас сделал бы его через внутреннее объединение и только возвратил бы записи, которые существуют в обоих.

0
ответ дан 29 November 2019 в 20:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: