如何使用 knextjs 连接查询
How to concatenate a query with knextjs
我正在尝试将此 SQL 存档到 Knext,但我不知道该怎么做
这是原始查询,使用控制台在 postgresql 中功能齐全
select permiso.patente, categoria.nombre,permiso.fecha_caducidad,DATE_PART('day', permiso.fecha_caducidad:: TIMESTAMP - now():: TIMESTAMP)
from categoria
inner join permiso on permiso.idcategoria = categoria.idcategoria
and permiso.patente
in (
select equipo.patente
from equipo
inner join empresa on equipo.rutempresa = empresa.rutempresa
where empresa.rutempresa = 84123456
)
这就是我尝试使用 knextjs 进行存档的方式
const test2 =
db.select(['permiso.patente'
,'categoria.nombre'
,'permiso.fecha_caducidad'])
/*,('DATE_PART("day",permiso.fecha_caducidad::TIMESTAMP - now()::TIMESTAMP')])*/
.from('permiso')
.innerJoin('categoria','categoria.idcategoria','permiso.idcategoria')
.whereIn(
db.select('equipo.patente')
.from('equipo')
.innerJoin('empresa','equipo.rutempresa','empresa.rutempresa')
.where('empresa.rutempresa',84123456)
)
.then(data => console.log(data))
.catch(error => console.log(error))
预期结果:
-"PKYJ03" "Revision Tecnica" "2021-11-26 00:00:00" "784"
-"PKYJ03" "Certificado Seguridad" "2021-11-26 00:00:00" "784"
-"PKYJ03" "Certificado Seguridad" "2019-08-24 00:00:00" "-40"
-"PKYJ03" "Certificado Seguridad" "2019-08-25 00:00:00" "-39"
-"PKYJ03" "Revision Tecnica" "2019-09-26 00:00:00" "-7"
获取:
Error: Undefined binding(s) detected when compiling SELECT. Undefined column(s): [select "equipo"."patente" from "equipo" inner join "empresa" on "equipo"."rutempresa" = "empresa"."rutempresa" where "empresa"."rutempresa" = 84123456] query: select "permiso"."patente", "categoria"."nombre", "permiso"."fecha_caducidad" from "permiso" inner join "categoria" on "categoria"."idcategoria" = "permiso"."idcategoria" where select "equipo"."patente" from "equipo" inner join "empresa" on "equipo"."rutempresa" = "empresa"."rutempresa" where "empresa"."rutempresa" = ? in ?
你写的 select 部分有点错误......应该是这样的:
db.select('permiso.patente'
,'categoria.nombre'
,'permiso.fecha_caducidad'
,knex.raw("DATE_PART('day',permiso.fecha_caducidad::TIMESTAMP - now()::TIMESTAMP"))
另外,原始查询在其他部分确实看起来有点不同(比如它从类别而不是 permiso 查询),但其余部分在语法上似乎更正确。使用 .toSQL
检查来自构建器的结果查询,以查看 knex 为您生成的内容。
好的。这是使用相同子查询的最终正确答案;感谢 Mikael 的帮助。
原文SQL:
select permiso.patente, categoria.nombre,permiso.fecha_caducidad,DATE_PART('day', permiso.fecha_caducidad:: TIMESTAMP - now():: TIMESTAMP)
from categoria
inner join permiso on permiso.idcategoria = categoria.idcategoria
and permiso.patente
in (
select equipo.patente
from equipo
inner join empresa on equipo.rutempresa = empresa.rutempresa
where empresa.rutempresa = 84123456
)
Knex风格查询:
子查询:
const subquery =
db.select('equipo.patente')
.from('equipo')
.innerJoin('empresa','equipo.rutempresa','empresa.rutempresa')
.where('empresa.rutempresa',84123456)
主查询:
const test3 =
db.select(['permiso.patente'
,'categoria.nombre'
,'permiso.fecha_caducidad'
,db.raw("DATE_PART('day',permiso.fecha_caducidad::TIMESTAMP - now()::TIMESTAMP)")])
.from('permiso')
.innerJoin('categoria','categoria.idcategoria','permiso.idcategoria')
.whereIn('permiso.patente', subquery)
.then(data => console.log(data))
.catch(error => console.log(error))
预期和给定结果:
"PKYJ03" "Revision Tecnica" "2021-11-26 00:00:00" "782"
"PKYJ03" "Certificado Seguridad" "2021-11-26 00:00:00" "782"
"PKYJ03" "Certificado Seguridad" "2019-08-24 00:00:00" "-42"
"PKYJ03" "Certificado Seguridad" "2019-08-25 00:00:00" "-41"
"PKYJ03" "Revision Tecnica" "2019-09-26 00:00:00" "-9"
正如 Mikael 所说,原始查询与此查询之间存在一些差异,但数据库结果是相同的。
我正在尝试将此 SQL 存档到 Knext,但我不知道该怎么做
这是原始查询,使用控制台在 postgresql 中功能齐全
select permiso.patente, categoria.nombre,permiso.fecha_caducidad,DATE_PART('day', permiso.fecha_caducidad:: TIMESTAMP - now():: TIMESTAMP)
from categoria
inner join permiso on permiso.idcategoria = categoria.idcategoria
and permiso.patente
in (
select equipo.patente
from equipo
inner join empresa on equipo.rutempresa = empresa.rutempresa
where empresa.rutempresa = 84123456
)
这就是我尝试使用 knextjs 进行存档的方式
const test2 =
db.select(['permiso.patente'
,'categoria.nombre'
,'permiso.fecha_caducidad'])
/*,('DATE_PART("day",permiso.fecha_caducidad::TIMESTAMP - now()::TIMESTAMP')])*/
.from('permiso')
.innerJoin('categoria','categoria.idcategoria','permiso.idcategoria')
.whereIn(
db.select('equipo.patente')
.from('equipo')
.innerJoin('empresa','equipo.rutempresa','empresa.rutempresa')
.where('empresa.rutempresa',84123456)
)
.then(data => console.log(data))
.catch(error => console.log(error))
预期结果:
-"PKYJ03" "Revision Tecnica" "2021-11-26 00:00:00" "784"
-"PKYJ03" "Certificado Seguridad" "2021-11-26 00:00:00" "784"
-"PKYJ03" "Certificado Seguridad" "2019-08-24 00:00:00" "-40"
-"PKYJ03" "Certificado Seguridad" "2019-08-25 00:00:00" "-39"
-"PKYJ03" "Revision Tecnica" "2019-09-26 00:00:00" "-7"
获取:
Error: Undefined binding(s) detected when compiling SELECT. Undefined column(s): [select "equipo"."patente" from "equipo" inner join "empresa" on "equipo"."rutempresa" = "empresa"."rutempresa" where "empresa"."rutempresa" = 84123456] query: select "permiso"."patente", "categoria"."nombre", "permiso"."fecha_caducidad" from "permiso" inner join "categoria" on "categoria"."idcategoria" = "permiso"."idcategoria" where select "equipo"."patente" from "equipo" inner join "empresa" on "equipo"."rutempresa" = "empresa"."rutempresa" where "empresa"."rutempresa" = ? in ?
你写的 select 部分有点错误......应该是这样的:
db.select('permiso.patente'
,'categoria.nombre'
,'permiso.fecha_caducidad'
,knex.raw("DATE_PART('day',permiso.fecha_caducidad::TIMESTAMP - now()::TIMESTAMP"))
另外,原始查询在其他部分确实看起来有点不同(比如它从类别而不是 permiso 查询),但其余部分在语法上似乎更正确。使用 .toSQL
检查来自构建器的结果查询,以查看 knex 为您生成的内容。
好的。这是使用相同子查询的最终正确答案;感谢 Mikael 的帮助。
原文SQL:
select permiso.patente, categoria.nombre,permiso.fecha_caducidad,DATE_PART('day', permiso.fecha_caducidad:: TIMESTAMP - now():: TIMESTAMP)
from categoria
inner join permiso on permiso.idcategoria = categoria.idcategoria
and permiso.patente
in (
select equipo.patente
from equipo
inner join empresa on equipo.rutempresa = empresa.rutempresa
where empresa.rutempresa = 84123456
)
Knex风格查询:
子查询:
const subquery =
db.select('equipo.patente')
.from('equipo')
.innerJoin('empresa','equipo.rutempresa','empresa.rutempresa')
.where('empresa.rutempresa',84123456)
主查询:
const test3 =
db.select(['permiso.patente'
,'categoria.nombre'
,'permiso.fecha_caducidad'
,db.raw("DATE_PART('day',permiso.fecha_caducidad::TIMESTAMP - now()::TIMESTAMP)")])
.from('permiso')
.innerJoin('categoria','categoria.idcategoria','permiso.idcategoria')
.whereIn('permiso.patente', subquery)
.then(data => console.log(data))
.catch(error => console.log(error))
预期和给定结果:
"PKYJ03" "Revision Tecnica" "2021-11-26 00:00:00" "782"
"PKYJ03" "Certificado Seguridad" "2021-11-26 00:00:00" "782"
"PKYJ03" "Certificado Seguridad" "2019-08-24 00:00:00" "-42"
"PKYJ03" "Certificado Seguridad" "2019-08-25 00:00:00" "-41"
"PKYJ03" "Revision Tecnica" "2019-09-26 00:00:00" "-9"
正如 Mikael 所说,原始查询与此查询之间存在一些差异,但数据库结果是相同的。