Не в пункте postgresql

Таблица 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 преобразованы.

что значит мусорное ведро? и каков ваш ожидаемый результат?

Juan Carlos Oropeza 06.11.2018 20:29

в приведенном выше примере я упомянул, что результат будет равен нулю. Отрезки означают, что значения столбца оценок преобразуются в A, B, C

user8545255 06.11.2018 20:32

Я проверяю еще раз и не вижу ничего похожего на вывод desire,

Juan Carlos Oropeza 06.11.2018 20:35
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
29
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Мне кажется, вы нашли что-то вроде ниже 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 поддерживает кортежи, поэтому нет необходимости в объединении.

Другие вопросы по теме