НЕ НРАВИТСЯ, ГНЕЗД SQL - PullRequest
       4

НЕ НРАВИТСЯ, ГНЕЗД SQL

0 голосов
/ 03 февраля 2020

У меня есть таблица, в которой содержатся значения телефонных номеров, которые также могут быть подстановочными символами, такими как%, указанный ниже

select phonenumber from table_2 ;

  1    5159199076
  2    210645%
  3    %0869067

Мне нужна помощь с запросом SQL для исключить все значения телефонного номера, которые существуют в таблице_2

Таким образом, таблица_1 имеет эти значения

ID     Phonenumber
   101     9757895378
   201   **2106450789**
   301   **9190869067**
   401     8757895078

select table_1.phone_number
from table_1
where table_1.phone_number not in 
(
  select phonenumber from table_2
  where phonenumber = table_1.phonenumber) 

Это работает, если в таблице_2 нет подстановочных знаков, например 210645% или % 0869067

Я обновил SQL

select table_1.phone_number
from table_1
where table_1.phone_number not like 
(
  select phonenumber from table_2
  )

, в результате чего строки не возвращаются. Как изменить SQL, чтобы получить правильный результат, чтобы подстановочные знаки не были включены? БД postgres.

Спасибо

Ответы [ 2 ]

0 голосов
/ 03 февраля 2020

Используйте LIKE ANY для сравнения со всеми элементами в подвыборке:

SELECT table_1.phone_number
FROM table_1
WHERE NOT table_1.phone_number
          LIKE ANY (array(
                       SELECT table_2.phone_number
                       FROM table_2
                   ));
0 голосов
/ 03 февраля 2020
select table_1.phone_number
from table_1
where table_1.phone_number not in 
(
  select phonenumber from table_2) 
...