我在Postgres 9.6数据库中有两个表,分别是persongrade:

人员:

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

职等:

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

DDL DML(&A):

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

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);

I want to construct a query without CASE or JOIN (cannot join, no common key) to list name and grade.
This query does not work:

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

推荐答案

联接不需要"公用键".任何布尔表达式都可用作联接条件:

SELECT p.name, g.grade
FROM   person p
JOIN   grade  g ON p.score BETWEEN g.min_score AND g.max_score;

fiddle

更多的在the manual on joining tables.

Sql相关问答推荐

SQL查询以条件空值跟踪生产操作结果进展

当一个视图在Postgres中失效时?

在数据库中搜索列

返回找到的最小和最大row_number()spark SQL

查询每周数据(周一至周日),避免年度日期重叠

如果多行科目有一行在指定的日期范围内,如何 Select 该科目在该日期之前的所有行?

以一致的价值获得独特的价值

需要从键-值对数据中提取值

如何在SQL中从多个查询进行分组

最小非重复集的SQL查询

违反了完整性约束-值存在时找不到父键

我需要在 ASP.NET C# 中获取 2 个 SQL 查询结果的平均值

使用 XML 作为 SQL 表

基于变量的条件 WHERE 子句

为重复的项目编号显示正在处理

如何在 SQL Server 中将 -13422.8450 舍入到 -13422.84

来自 SQL Server 的树层次 struct 图的 JSON

包含多行的 SQL 查询

如何在 Trino/Presto 中过滤掉 map 中的某些键?

在现有日期列的查询结果中添加周数列