我正在尝试使用内部查询进行连接和列。实际的查询有点复杂,下面但我已经简化了这个问题。考虑我有一个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 || '%'
由于
答案 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