【问题标题】:NOT LIKE NESTED SQL不喜欢嵌套 SQL
【发布时间】:2020-02-03 04:13:00
【问题描述】:

我有一个包含电话号码值的表格,它也可以是通配符,例如下面提到的 %

select phonenumber from table_2 ;

  1    5159199076
  2    210645%
  3    %0869067

我需要有关 SQL 查询的帮助,以排除 table_2 中存在的电话号码的所有值

所以 table_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) 

如果 table_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 以获得正确的结果,以便不包含通配符? DB 是 postgres。

谢谢

【问题讨论】:

    标签: sql postgresql sql-like


    【解决方案1】:

    使用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
                       ));
    

    【讨论】:

    • 感谢您的回复。仍然返回应该基于通配符忽略的相同值。
    【解决方案2】:
    select table_1.phone_number
    from table_1
    where table_1.phone_number not in 
    (
      select phonenumber from table_2) 
    

    【讨论】:

    • 如果你能添加一些关于代码的解释会很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2017-03-21
    • 1970-01-01
    相关资源
    最近更新 更多