我正在try 用postgresql进行查询.

"王国"的关系包括国王的名字以及他的王国开始和结束的时间."日常"关系包括姓名、性别、出生和死亡.

我想问的是国王,他go 世时是最年长的一位.

通过我的查询,我在第3行(不在)收到了这个错误:subquery has too many columns

以下是问题:

SELECT kingdom.king, dinasty.birth, dinasty.death
FROM kingdom, dinasty
WHERE kingdom.king = dinasty.name AND kingdom.king NOT IN
(
    SELECT DISTINCT R1.king, R1.birth, R1.death
    FROM
    (
        SELECT DISTINCT R1.king, D1.birth, D1.death
        FROM kingdom AS R1, dinasty AS D1, dinasty AS D2
        WHERE R1.king=D1.name
    ) AS R1, 
    (
        SELECT DISTINCT R1.king, D1.birth, D1.death
        FROM kingdom AS R1, dinasty AS D1, dinasty AS D2
        WHERE R1.king=D1.name
    ) AS R2
    WHERE R1.death-R1.birth < R2.death-R2.birth
);

不在里面的东西是正确的.

推荐答案

在子查询中投影three列,但在IN子句中比较其中的one列.仅为子查询中的IN Select 所需的列(r1.king):

SELECT kingdom.king, dinasty.birth, dinasty.death
FROM kingdom, dinasty
WHERE kingdom.king = dinasty.name AND kingdom.king NOT IN
(
    SELECT DISTINCT R1.king
    FROM
    (
        SELECT DISTINCT R1.king, D1.birth, D1.death
        FROM kingdom AS R1, dinasty AS D1, dinasty AS D2
        WHERE R1.king=D1.name
    ) AS R1, 
    (
        SELECT DISTINCT R1.king, D1.birth, D1.death
        FROM kingdom AS R1, dinasty AS D1, dinasty AS D2
        WHERE R1.king=D1.name
    ) AS R2
    WHERE R1.death-R1.birth < R2.death-R2.birth
);

Postgresql相关问答推荐

在Ubuntu 18.04 Bionic上安装PostgreSQL(已删除回购)

docker-compose.yml用于使用postgres的spring-boot应用程序

Postgres:这是对OVERLAPS谓词的等效重写吗?

我应该如何更新热门表?

PostGresql :正则表达式 Select 其中只有一个正斜杠的行

安装age-installation时出错

需要用 jack/pgx 更新 golang 中复合类型的 PSQL 行

gorm 创建并返回值 many2many

Postgres 查询计划器不会使用更便宜的复合索引

在 KnexJS 中插入

如何在 PSQL 中查找从另一个表继承的子表

在 PostgreSQL docker 镜像中创建表

更详细地解释 JOIN 与 LEFT JOIN 和 WHERE 条件性能建议

断言错误:Django-rest-Framework

PostgreSQL 权限解释

由于外键约束无法删除对象

实时监控 PostgreSQL 查询的应用程序?

PL/pgSQL 执行与执行

在 postgres 中导出为 CSV 并使用 GZIP 压缩

用于将布尔列排序为 true、null、false 的 SQL