我有PostgreSQL中的INSERT的問題。我有這個查詢:PostgreSQL的插入行不同於選擇
INSERT INTO track_segments(tid, gdid1, gdid2, distance, speed)
SELECT * FROM (
SELECT DISTINCT ON (pga.gdid)
pga.tid as ntid,
pga.gdid as gdid1, pgb.gdid as gdid2,
ST_Distance(pga.geopoint, pgb.geopoint) AS segdist,
(ST_Distance(pga.geopoint, pgb.geopoint)/EXTRACT(EPOCH FROM (pgb.timestamp - pga.timestamp + interval '0.1 second'))) as speed
FROM fl_pure_geodata AS pga
LEFT OUTER JOIN fl_pure_geodata AS pgb ON (pga.timestamp < pgb.timestamp AND pga.tid = pgb.tid)
ORDER BY pga.gdid ASC) AS sq
WHERE sq.gdid2 IS NOT NULL;
填充與成對的連接的地點點的表。當我單獨運行SELECT時,我得到了正確的對,但是當我在上面的語句中使用它時,有些配對方式是錯誤的,或者根本不配對。這就是我的意思是:SELECT單獨的
結果:
tid;gdid1;gdid2;distance;speed
"0f6fd522-5f1e-49a4-b85e-50f11ef7f908";10;11;34.105058803;31.0045989118182
"0f6fd522-5f1e-49a4-b85e-50f11ef7f908";11;12;90.099603143;14.7704267447541
"0f6fd522-5f1e-49a4-b85e-50f11ef7f908";12;13;23.331326565;21.2102968772727
結果後插入使用相同的選擇:
tid;gdid1;gdid2;distance;speed
"0f6fd522-5f1e-49a4-b85e-50f11ef7f908";10;12;122.574;17.2639603638028
"0f6fd522-5f1e-49a4-b85e-50f11ef7f908";11;12;90.0996;14.7704267447541
"0f6fd522-5f1e-49a4-b85e-50f11ef7f908";12;13;23.3313;21.2102968772727
什麼是是,原因是什麼?這與INSERT的SELECT語句完全相同,爲什麼它會給出不同的結果?
順便說一句:與'WHERE sq.gdid2 IS NOT NULL;'有效變換LEFT加入到純加入。 – joop
注2:'(pga.timestamp
joop
@joop哦,沒錯。我最初想要顯示空值,以查看最後一點是否正確無法連接到具有不同tid的下一個點。當我寫這篇文章時已經很晚了,忘記了JOIN。感謝您的更正! –