Sql 如何在子查询上使用通配符?
我想运行一个查询:Sql 如何在子查询上使用通配符?,sql,oracle,Sql,Oracle,我想运行一个查询: Table: FirstNames NAME Tom Joe Peter Table: FullNames FULL_NAME: Tom Petty. Joe Satriani. Peter Griffin. Sarah Connor. 它产生: ORA-01427:单行子查询返回多行 这似乎是正确的。在Oracle中有这样做的方法吗?您可以使用exists: select * from FullNames whe
Table: FirstNames
NAME
Tom
Joe
Peter
Table: FullNames
FULL_NAME:
Tom Petty.
Joe Satriani.
Peter Griffin.
Sarah Connor.
它产生:
ORA-01427:单行子查询返回多行
这似乎是正确的。在Oracle中有这样做的方法吗?您可以使用
exists
:
select *
from FullNames where FULL_NAME like '%' || (select NAME from FirstNames) || '%'
您可以使用
JOIN
:
select f.*
from FullNames f
where exists (select 1
from firstnames fn
where f.FULL_NAME like '%' || fn.NAME || '%'
);
OP的查询虽然语法不正确,但建议只返回
fullnames.fullname
中的值;因此,select*
可能太过分了。此外,如果另一个表中有匹配项,则似乎只应返回一次全名
,即使实际上可能有多个匹配项(例如对于Tom Joe Smith
)。如果是这样的话——这很可能是OP的尝试——那么戈登的解决方案就是正确的。OP需要半联接,而不是联接,这取决于具体情况。如果OP只需要全名而不需要任何其他信息,那么yes semi join是正确的(这是我们没有的hame)。另一方面,如果他想知道选择了哪个名称,那么JOIN
是正确的。无论如何,它仍然可以重写为选择不同的f.full_name
,但是我们可以从性能角度进行讨论。感谢您以正确的方式发布问题!您提供了示例数据,以及您的尝试和完整的错误消息。希望有更多的人会尽一点努力来学习如何发布一个问题!
SELECT *
FROM FullNames f
JOIN FirstNames g
ON f.FULL_NAME LIKE '%' || g.NAME || '%';