Вы не упоминаете, какую базу данных вы используете, поэтому я предполагаю, что это MySQL 8.x.
Вероятно, лучше отделить ID
от TYPE
с помощью CTE , Тогда запрос становится намного проще. Например:
with
x as ( -- this CTE just to separate the ID from the TYPE
select *,
substring(productid, 1, char_length(productid) - 1) as id,
right(productid, 1) as type
from t
)
select x.*, case when y.id is null then 'Power Only' else 'Dual' end
from x
left join y on x.id = y.id and y.type = 'G'
where x.type = 'E'
union all
select x.*, case when y.id is null then 'Gas Only' else 'Dual' end
from x
left join y on x.id = y.id and y.type = 'E'
where x.type = 'G'
order by id, type
Обратите внимание, что я использую UNION ALL
. Это потому, что MySQL (пока) не реализует FULL OUTER JOIN. Хитрость здесь в том, чтобы повторить запрос несколько в обратном порядке .