表1
emp_id Grade
1 first_class
2 Second_class
3 first_class
4 third_class
table2
emp_id Grade
1 A
2 B
3 A
4 C
在表2中,我们具有已转换的成绩列值
例如
如果first_class然后是A
如果是Secondclass,那么B
如果是Third_class,则为C
如何编写与下面类似的查询
select * from table1 where
emp_id||Grade not in (select emp_id||Grade from table2);
上面的查询不起作用,因为“成绩”列值在表之一中被转换。
答案 0 :(得分:0)
在我看来,您发现类似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);
答案 1 :(得分:0)
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);
答案 2 :(得分:0)
我会使用元组:
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支持元组,因此不需要串联。