我在Postgres 8.2数据库(Windows)上运行此查询:
SELECT
*
FROM
(SELECT * FROM table1 tb1 WHERE date='2019-03-06' ) tb1
JOIN table2 tb2 ON
tb2.tb1_id = tb1.id
WHERE
tb2.date ='2019-03-06'
然后我收到此错误消息:
错误:关系块11729中的无效页眉 “ table1_pkey” SQL状态:XX001
但是,当我添加Order By
子句时,此查询运行良好。
SELECT
*
FROM
(SELECT * FROM table1 tb1 WHERE date='2019-03-06' ORDER BY id) tb1
JOIN table2 tb2 ON
tb2.tb1_id = tb1.id
WHERE
tb2.date = '2019-03-06'
AFAIK,由于内存不足或驱动器错误而导致错误“块xxx中的页眉无效”(链接:Postgres Database Error Invalid Page Header)。
但是,当我添加Order By
条款时,它将如何运行?
答案 0 :(得分:0)
我认为您的查询无法评估SELECT * FROM table1
实际返回的列,因此不知道tb1.id
是否存在并且是主键。
我看到您的查询,您可以像这样进行简单的连接:
SELECT
*
FROM
table1 tb1
JOIN
table2 tb2 ON tb2.tb1_id = tb1.id
WHERE
tb2.date = '2019-03-06' AND tb1.date = '2019-03-06'
结果应相同。是的,这可能会给性能带来损失,但这并不重要。