Псевдонимы столбцов, определенные в select
, недоступны в большинстве запросов на том же уровне select
. В частности, они недоступны для предложений where
или from
.
Вы можете сделать это, используя having
:
select *,
(case when position('/' in pax_name) > 0
then SUBSTR(pax_name, 1, position('/' in pax_name)- 1)
end) as lastname,
(case when position('/' in pax_name) >0
then substr(pax_name, position('/' in pax_name) + 1, length(pax_name))
end) as firstname
from o inner join
m
on o.record = m.record
having o.pax_first_name = firstname and
o.pax_last_name = lastname;
Вы можете упростить логику. Я думаю, что вы просто хотите:
select *,
(case when pax_name like '%'
then substring_index(pax_name, '/', 1)
end) as firstname,
(case when pax_name like '%'
then substring_index(pax_name, '/', -1)
end) as lastname
from o inner join
m
on o.record = m.record
having o.pax_first_name = firstname and
o.pax_last_name = lastname;
Я бы также рекомендовал отказаться от наличия, так что:
select *,
(case when pax_name like '%'
then substring_index(pax_name, '/', 1)
end) as firstname,
(case when pax_name like '%'
then substring_index(pax_name, '/', -1)
end) as lastname
from o inner join
m
on o.record = m.record
m.pax_name = concat_ws('/', o.pax_first_name, o.pax_last_name);