Oracle:有一个“ CUSTOMER”表和“ EXCEPTION_KEYWORDS”表。 我想从Exception_keywords表中选择名称包含任何关键字的客户。
我尝试在Regexp_Like内部使用子查询,但出现错误:
ORA-01427:单行子查询返回多个行 01427. 00000-“单行子查询返回多个行”
我的查询:
SELECT * FROM CUSTOMER
WHERE REGEXP_LIKE (STD_NAME,(Select KEYWORD from EXCEPTION_KEYWORDS),'i');
注意:我只需要使用Regexp解决方案。
答案 0 :(得分:1)
也许使用LIKE
和lower()
的存在查询
SELECT * FROM CUSTOMER c
WHERE EXISTS ( SELECT 1 FROM
EXCEPTION_KEYWORDS e
WHERE lower(c.STD_NAME) like '%'||lower(e.KEYWORD)||'%' );
答案 1 :(得分:1)
检查存在性
SELECT *
FROM CUSTOMER
WHERE EXISTS (select null from EXCEPTION_KEYWORDS where REGEXP_LIKE (STD_NAME,KEYWORD ,'i'));
答案 2 :(得分:1)
另一种方法是将regexp_like()
与listagg()
函数一起使用:
SELECT *
FROM CUSTOMER
WHERE REGEXP_LIKE (STD_NAME,
(SELECT LISTAGG(KEYWORD,'|') WITHIN GROUP (ORDER BY KEYWORD) list
FROM EXCEPTION_KEYWORDS),'i');
答案 3 :(得分:0)
您可以直接JOIN
这些表并在regexp_like()
子句中使用ON
:
SELECT *
FROM CUSTOMER
JOIN EXCEPTION_KEYWORDS
ON REGEXP_LIKE (STD_NAME,KEYWORD,'i');