【问题标题】:query inside like operator在 like 运算符内查询
【发布时间】:2017-10-23 07:44:35
【问题描述】:

我可以在like 运算符中使用查询吗?

我使用了下面的查询,但它返回错误。

select * 
from customers
where cust_name like '%'||select name from members||'%'

【问题讨论】:

  • 你想过滤成员的名字吗?在这种情况下,使用子查询

标签: sql oracle sql-like


【解决方案1】:

类似下面的东西应该可以工作:

SELECT
 *
FROM
 customers    c
WHERE 1=1
AND EXISTS
 (SELECT 1
  FROM members   m
  WHERE 1=1
  AND c.cust_name LIKE '%'||m.name||'%'
 )

【讨论】:

  • WHERE 1=1 没用
  • @a_horse_with_no_name 这是习惯——我总是把它作为第一个 where 条件,以防我需要开始注释行——不想继续移动“WHERE”
【解决方案2】:

PLSQL 中,如果要运行查询,则需要标记一个变量来保存查询结果。所以你可以这样做:

DECLARE
   var   customers%ROWTYPE;
BEGIN
   SELECT c.*
     INTO var
     FROM customers c
          INNER JOIN members m ON c.cust_name LIKE '%' || m.name || '%';
END;

【讨论】:

    【解决方案3】:

    将子查询括在括号中就足够了

    喜欢 cust_name like '%'||(从成员中选择名称)||'%'

    但这仅适用于表“成员”只有一条记录时

    【讨论】:

      【解决方案4】:

      您应该在子选择中定义成员的名称部分(仅适用于 1 行):

      select * 
      from customers
      where cust_name like (select '%'||name||'%' from members);
      

      使用 JOIN 也可以做到这一点(适用于多行):

      select C.* 
      from customers C 
      INNER JOIN MEMBERS M ON (C.CUST_NAME LIKE '%'||M.NAME||'%');
      

      【讨论】:

      • 我使用了第二个,因为我有超过 1 行要从子查询返回。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多