Таблица 1
emp_id Grade
1 first_class
2 Second_class
3 first_class
4 third_class
Таблица 2
emp_id Grade
1 A
2 B
3 A
4 C
В таблице 2 у нас есть значения столбца оценок, которые преобразованы.
например
если first_class, то A
если Second_class, то B
если третий_класс, то C
Как написать запрос, похожий на приведенный ниже
select * from table1 where
emp_id||Grade not in (select emp_id||Grade from table2);
приведенный выше запрос не работает, потому что в одной из таблиц значения столбца Grade преобразованы.
в приведенном выше примере я упомянул, что результат будет равен нулю. Отрезки означают, что значения столбца оценок преобразуются в A, B, C
Я проверяю еще раз и не вижу ничего похожего на вывод desire,


Мне кажется, вы нашли что-то вроде ниже sql
select * from table1 where
concat(emp_id,
case Grade when 'first_class' then 'A'
when 'Second_class' then 'B'
when 'third_class' then 'C' end) not in
(select concat(emp_id,Grade) from table2);
select *
from table1
where emp_id||Grade not in (select emp_id || CASE Grade
WHEN 'A' THEN 'first_class'
WHEN 'B' THEN 'Second_class'
WHEN 'C' THEN 'third_class'
END
from table2);
Я бы использовал кортежи:
select t1.*
from t1
where (emp_id, grade) not in (select emp_id,
(case Grade when 'first_class' then 'A'
when 'Second_class' then 'B'
when 'third_class' then 'C'
else ''
end)
from table2
);
Обратите внимание, что NOT IN заставляет меня нервничать из-за того, как он работает со значениями NULL. По этой причине я добавил пустую строку для ELSE.
Postgres поддерживает кортежи, поэтому нет необходимости в объединении.
что значит мусорное ведро? и каков ваш ожидаемый результат?