postgresql - 临时表丢失所有行,除非单独选择?
问题描述
PostgreSQL 新手,遇到一些问题。我有很长的代码集,其中使用了许多临时表,其中一个“主”临时表正在使用其他所有临时表的内容进行更新。但是,其中一张表的工作方式与其他表不同。这是它的代码:
--cargo and dwt creation
drop table if exists t_cargo;
create temp table t_cargo as
select
a.*,
b.dwt,
(b.dwt * .98) as cargo
from
t_vessel_list a
join
tanker b on a.imo = b.imo;
--end
--select * from t_cargo
--update cargo and dwt
UPDATE t_vessel_list
SET metric_tons = b.dwt,
vessel_cargo = b.cargo
FROM t_cargo b
WHERE t_vessel_list.vessel = b.vessel;
--end
该表在查询中的其他任何地方都没有被调用,但是当它作为整个查询的一部分运行时,该表没有数据。如果它单独运行(如,突出显示然后运行),它只会有数据并正确更新它。否则,它是空的,并且更新导致空列。
根据要求,这是查询中的第二个临时表,它确实有效:
--create a table for draught data, separate because joins will filter
drop table if exists t_ais_draught;
create temp table t_ais_draught as
select distinct
a.*,
b.date,
b.destination,
b.poi,
b.draught
from
t_vessel_list a
join lateral
(
select * from asvt_position b where a.vessel = b.vessel order by 2 desc
limit 1
) b on true;
--end
--update draughts
UPDATE t_vessel_list
set v_draught = b.draught
FROM t_ais_draught b
where t_vessel_list.vessel = b.vessel;
--end
这组代码有效,并且与第一组代码的差异很小。查询中的所有代码看起来都像第一个或第二个临时表代码,除了我在顶部链接的代码之外,所有代码都可以正常工作。
**经过更多的试验和错误,我发现解决方案是将临时表和更新调用移动到查询的后面部分。这样做之后,它看起来并没有弄乱查询的任何其他部分,但我仍然不明白为什么这首先不起作用。如前所述,在发布的代码之外的查询中的任何地方都不会调用 t_cargo 表。
谁能解释发生了什么?
解决方案
推荐阅读
- c# - C# DataTable OrderBy 错误排序
- java - GetMax() 方法的递归关系
- google-apps-script - TypeError:无法从未定义中读取属性“值”。(第 2 行,文件“代码”)
- selenium - 在 DigitalOcean 中运行无头 Firefox 或 chrome
- mysql - MySQL - 将字段限制为最多 5 次出现
- google-sheets - countIf 合并单元格
- phpunit - 在 phpunit 测试中抑制 symfony 4 响应主体
- typescript - TypeScript Sinon 调用假返回类型不匹配
- kotlin - 如何声明一组固定字符串的 Kotlin 类型?
- python - 哪个是第一次运行,usersetup.mel 还是 userSetup.py?