在like子句中使用另一个查询的参数

时间:2015-09-18 19:13:41

标签: sql oracle

我正在尝试使用内部查询进行连接和列。实际的查询有点复杂,下面但我已经简化了这个问题。考虑我有一个peopel表。我有两个喜欢。第一个名字是两行中的George,但last_name是每行中的Lloyd和Lloyds。我希望能够返回两行。我正在寻找Lloyd - 在内部联接中返回,然后尝试在外部查询中执行类似int。这只返回Lloyd的第一行。不是那个与s。

有可能这样做吗?如果我正在寻找劳埃德并且硬编码我可以做

like 'Lloyd%'

但在我的情况下,我返回了很多行,所以我想动态地进行。

select * from people p
join
 (select p1.id, p1.first_name, p1.last_name 
  from people p1 
  where p1.first_name = 'George' and p1.last_name = 'Lloyd'     and p1.id = 17)
un on un.id = p.id
where p.first_name = un.first_name and p.last_name like  '%' || un.last_name || '%'

由于

3 个答案:

答案 0 :(得分:1)

您只收到一行,因为您的查询仅基于一行(假设您的表中ID是唯一的)

删除id = 17

    select * 
    from people
    where first_name = :first_name
    and last_name like :last_name 

答案 1 :(得分:1)

你可以试试这个:

SELECT * FROM PEOPLE P
INNER JOIN PEOPLE P2 ON P.FIRST_NAME = P2.FIRST_NAME 
and instr(upper(p.last_name),upper(p2.last_name))<>0;

答案 2 :(得分:1)

由于您的加入条件位于un.id = p.id,因此您的结果集始终限制为id = 17

听起来这是你想写的查询:

select * from people p
join
 (select p1.id, p1.first_name, p1.last_name 
  from people p1 
  where p1.first_name = 'George' and p1.last_name = 'Lloyd'     and p1.id = 17)
un on p.first_name = un.first_name and p.last_name like  '%' || un.last_name || '%'

...我个人会对此进行一些清理:

select p2.*
  from people p1
  join people p2
    on p2.first_name = p1.first_name
   and p2.last_name like '%' || p1.last_name || '%'
 where p1.first_name = 'George'
   and p1.last_name = 'Lloyd'
   and p1.id = 17