簡體   English   中英

在like子句中使用另一個查詢中的參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM