【发布时间】:2017-10-23 07:44:35
【问题描述】:
我可以在like 运算符中使用查询吗?
我使用了下面的查询,但它返回错误。
select *
from customers
where cust_name like '%'||select name from members||'%'
【问题讨论】:
-
你想过滤成员的名字吗?在这种情况下,使用子查询
我可以在like 运算符中使用查询吗?
我使用了下面的查询,但它返回错误。
select *
from customers
where cust_name like '%'||select name from members||'%'
【问题讨论】:
类似下面的东西应该可以工作:
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 没用
在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;
【讨论】:
将子查询括在括号中就足够了
喜欢 cust_name like '%'||(从成员中选择名称)||'%'
但这仅适用于表“成员”只有一条记录时
【讨论】:
您应该在子选择中定义成员的名称部分(仅适用于 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||'%');
【讨论】: