Ich versuche, eine Abfrage mit der postgresql-Erddistanz-Erweiterung zu schreiben und möchte eine berechnete Spalte zurückgeben, aber ich erhalte immer eine Fehlermeldung über: fehlender FROM-Klauseleintrag für Tabelle "670906,-79". Dies liegt vermutlich daran, dass der Parser denkt, dass ein Punkt einen Tabellennamen von einem Spaltennamen trennt, aber in meinem Fall führe ich eine Berechnung durch (siehe Beispielabfrage unten). Gibt es eine Möglichkeit, dies zu umgehen?
Possibly unhandled error: missing FROM-clause entry for table "670906,-79"
at Connection.parseE (/usr/local/lib/node_modules/pg/lib/connection.js:534:11)
at Connection.parseMessage (/usr/local/lib/node_modules/pg/lib/connection.js:361:17)
at Socket.<anonymous> (/usr/local/lib/node_modules/pg/lib/connection.js:105:22)
at Socket.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:764:14)
at Socket.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:426:10)
at emitReadable (_stream_readable.js:422:5)
at readableAddChunk (_stream_readable.js:165:9)
at Socket.Readable.push (_stream_readable.js:127:10)
var columns = [
'id',
'(earth_distance(ll_to_earth(lat, lng), ll_to_earth(43.670906, -79.393331)) as distance)'
];
var result = knex
.select(columns)
.from('stores')
.whereRaw('earth_box(ll_to_earth(43.670906, -79.393331), ?) @> ll_to_earth(lat, lng)', [radiusInStatuteMiles])
Sie sollten knex.raw
für Ihre berechnete Spalte verwenden, damit sie nicht zitiert wird. Folgendes sollte funktionieren:
var columns = [
'id',
knex.raw('earth_distance(ll_to_earth(lat, lng), ll_to_earth(43.670906, -79.393331)) as distance')
];
var result = knex
.select(columns)
.from('stores')
.whereRaw('earth_box(ll_to_earth(43.670906, -79.393331), ?) @> ll_to_earth(lat, lng)', [radiusInStatuteMiles])
Vielen Dank! Genau das, was ich brauchte. Irgendwie habe ich nicht daran gedacht, knex.raw
.
Gern geschehen!
Hilfreichster Kommentar
Sie sollten
knex.raw
für Ihre berechnete Spalte verwenden, damit sie nicht zitiert wird. Folgendes sollte funktionieren: