【问题标题】:Is it possible in SQL to match a LIKE from a list of records in a subquery?在 SQL 中是否可以从子查询中的记录列表中匹配 LIKE?
【发布时间】:2009-02-26 04:33:56
【问题描述】:

使用这些表格作为示例:

代码变化

CODE
-----------
ABC_012
DEF_024
JKLX048

注册码

CODE       AMOUNT
--------   ------
ABCM012         5
ABCK012        25
JKLM048        16

当 CODE 与 CodeVariations 表的 any 行中的模式匹配时,是否可以编写查询来检索 RegisteredCodes 中的所有行?也就是说,任何与'ABC_012''DEF_024''JKLX048' 的 LIKE 模式匹配的行

结果应该是:

CODE       AMOUNT
--------   ------
ABCM012         5
ABCK012        25

我正在使用 PostgreSQL,但如果可以通过对 PostgreSQL 或任何其他数据库的简单查询来了解是否可以做到这一点,将会很有趣。

【问题讨论】:

    标签: sql postgresql sql-like


    【解决方案1】:

    这能满足你的需要吗?

    select distinct RC.* from RegisteredCodes RC, CodeVariations CV
    where RC.CODE LIKE CV.CODE;
    

    【讨论】:

    • 它需要是一个 SELECT DISTINCT 如果你想允许一个 CODE 可能像多个 CODEVARIATIONS.CODE 这在给定的数据中不会发生的情况,但是有可能的代码变化。
    【解决方案2】:

    这是您要找的吗:

    SELCET * FROM RegisteredCodes RC WHERE RC.Code IN (SELECT CODE FROM CodeVariations WHERE CODE LIKE ('ABC%') AND CODE LIKE ('%012')
    

    这将获取所有以“ABC”开头并以“012”结尾的记录,“DEF”和“JKL”类似。

    您在寻找类似this 的东西吗?

    【讨论】:

      【解决方案3】:
      select * from CAT_ITEM where DESCRICAO LIKE '%TUBO%%PVC%%DNR%'
      

      所有喜欢的列表都在一个字符串中。

      【讨论】:

        【解决方案4】:

        在 Oracle 和 PostgreSQL 中,您可以将单个字符通配符“_”用于单个字符。

        select RC.* from RegisteredCodes RC, CodeVariations CV
        where RC.CODE LIKE 'ABC_012';
        

        使用子字符串

        select RC.* from RegisteredCodes RC, CodeVariations CV
        where RC.CODE LIKE substring(CV.Code,1,3)||'_'||substring(CV.Code,5) ;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-10-18
          • 1970-01-01
          • 1970-01-01
          • 2022-07-29
          • 2021-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多