Search code examples
sqloracle-databaseplsqlmultiple-columnsambiguous

Ambiguous column query


I'm getting the "ambiguous column" error when running this query, but I'm having a hard time finding the cause:

select bobooks.ID request,    
       bobooks.TITLE,    
       bobooks.AUTHOR,    
       bogenres.NAME genre,    
       bobooks.OWNER,    
       bostatus.NAME status,    
       bolanguages.LANGUAGE language,    
       bolanguages2.LANGUAGE secondary_language    
from BO_BOOKS bobooks    
inner join BO_GENRES bogenres
  on bobooks.genre = bogenres.id    
inner join BO_STATUS bostatus
  on bobooks.status = bostatus.id    
inner join BO_LANGUAGES bolanguages
  on bobooks.language = bolanguages.id    
left outer join BO_LANGUAGES bolanguages2
  on bobooks.secondary_language = bolanguages2.id    
where (replace(:P19_AUTHOR, ' ', '') = '' or
       bobooks.author like '%'||:P19_AUTHOR||'%') AND    
      (replace(:P19_TITLE, ' ', '') = '' or
       bobooks.title like '%'||:P19_TITLE||'%') AND    
      (:P14_LANGUAGE = 'all' or
       language = :P19_LANGUAGE or
       secondary_language = :P19_LANGUAGE) AND
      (:P19_GENRE = 'all' or
       genre = :P19_GENRE) AND
      (replace(:P19_OWNER, ' ', '') = ''  or
       bobooks.owner like '%'||:P19_OWNER||'%');

Which columns am I messing up?

Thank you so much for your time!


Solution

  • You can NOT reference column aliases in the SELECT clause within the WHERE clause, at least not in the same query. You could subquery it, or just use the original column references.

    select     
     bobooks."ID" request,    
     bobooks."TITLE",    
     bobooks."AUTHOR",    
     bogenres."NAME" genre,    
     bobooks."OWNER",    
     bostatus."NAME" status,    
     bolanguages."LANGUAGE" language,    
     bolanguages2."LANGUAGE" secondary_language    
    from BO_BOOKS bobooks    
    inner join    
    BO_GENRES bogenres on bobooks.genre = bogenres.id    
    inner join     
    BO_STATUS bostatus on bobooks.status = bostatus.id    
    inner join     
    BO_LANGUAGES bolanguages on bobooks.language = bolanguages.id    
    left outer join    
    BO_LANGUAGES bolanguages2 on bobooks.secondary_language = bolanguages2.id    
    where     
    (replace(:P19_AUTHOR, ' ', '') = '' 
    or
    bobooks.author like '%'||:P19_AUTHOR||'%')
    AND    
    (replace(:P19_TITLE, ' ', '') = '' 
    or
    bobooks.title like '%'||:P19_TITLE||'%')
    AND    
    (:P14_LANGUAGE = 'all' 
    or
    bolanguages."LANGUAGE" = :P19_LANGUAGE
    or
    bolanguages2."LANGUAGE" = :P19_LANGUAGE)
    AND
    (:P19_GENRE = 'all' 
    or
    bogenres."NAME" = :P19_GENRE)
    AND
    (replace(:P19_OWNER, ' ', '') = '' 
    or
    bobooks.owner like '%'||:P19_OWNER||'%');