[英]Using a parameter from another query in a like clause
我正在嘗試使用內部查詢進行聯接和where列。 實際的查詢比下面的要復雜一些,但是我對此問題進行了簡化。 考慮我有一個peorpel表。 我有兩個喜歡。 兩行的名字都是George,但每行的姓氏是Lloyd和Lloyds。 我希望能夠返回兩行。 我正在尋找Lloyd-在內部聯接中返回該值,然后嘗試在外部查詢中進行類似的操作。 盡管使用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 || '%'
謝謝
您只收到一行,因為您的查詢僅基於一行(假設id在表中是唯一的)
刪除ID = 17
select *
from people
where first_name = :first_name
and last_name like :last_name
您可以嘗試以下方法:
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;
由於您的加入條件位於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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.