Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在子查询上使用通配符?_Sql_Oracle - Fatal编程技术网

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 || '%';