Gil*_*ilZ 2 javascript node.js knex.js
knex.js给定现有的子查询,我正在使用 构建查询。按照这个答案,以及GitHub 中的这个线程,我尝试了以下操作:
const knex = require("knex")({client: 'pg'});
const subQuery = knex.queryBuilder().select(1);
const query = knex.queryBuilder().select('*').from(subQuery);
console.log(query.toString());
Run Code Online (Sandbox Code Playgroud)
但结果是:
select * from select 1
Run Code Online (Sandbox Code Playgroud)
这显然有语法错误。我的预期结果是:
select * from (select 1)
Run Code Online (Sandbox Code Playgroud)
为什么不添加括号,我该如何更改它?
Your way, how you did it seems correct and I would say that it is bug in knex why it doesn't work (I'm collaborator in knex).
Anyways there are couple of ways to do it...
const knex = require("knex")({client: 'pg'});
const subQuery = knex.select(1).as('t1');
const query = knex.select('*').from(subQuery);
console.log(query.toSQL());
{ method: 'select',
options: {},
timeout: false,
cancelOnTimeout: false,
bindings: [],
__knexQueryUid: '69d240ad-f5f8-4bc4-8c1d-fb9432af1da2',
sql: 'select * from (select 1) as "t1"' }
Run Code Online (Sandbox Code Playgroud)
Or you can use older style with function() subquery, which doesn't require .as(), but supports it...
const query = knex.select('*').from(sq => sq.select(1));
console.log(query.toSQL());
{ method: 'select',
options: {},
timeout: false,
cancelOnTimeout: false,
bindings: [],
__knexQueryUid: '31beb080-c89a-43b2-b112-546077330e82',
sql: 'select * from (select 1)' }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5327 次 |
| 最近记录: |