根据另一个表中某一列的值获取一个表中某一列的值,无需 join 或 case when

问题描述 投票:0回答:1

DDL:

create table Person (ID int, name varchar, score int);
create table Grade (grade varchar, min_score int, max_score int);

Person
id  name    score
1   apple   8
4   berry   9
6   cat 5
7   dog 2

Grade
grade   min_score   max_score
D   0   2
C   3   5
B   6   8
A   9   10

DML:

insert into Person values (1, 'apple', 8), (4, 'berry', 9), (6, 'cat', 5), (7, 'dog', 2);
insert into Grade values ('D', 0, 2), ('C', 3, 5), ('B', 6, 8), ('A', 9, 10);

我有两个表,Person 和 Grade。我想构造一个不使用 Case When 或 Join(无法加入,没有公共键)的查询来列出“姓名”和“成绩”。我正在postgres9.6上运行。任何想法? 此查询不起作用:

select * from Grade g
where (select score from Person) between g.min_score and g.max_score;

理想的输出是:

name grade
apple B
berry A
cat C
dog D
postgresql rdbms
1个回答
0
投票

您不需要“通用密钥”来进行连接。任何布尔表达式都可以作为连接条件:

SELECT p.name, g.grade
FROM   person p
JOIN   grade  g ON p.score BETWEEN g.min_score AND g.max_score;
© www.soinside.com 2019 - 2024. All rights reserved.