使用knex.js从多个表中选择

时间:2017-11-08 13:25:40

标签: knex.js

如何运行此查询:

select * from table1, table2;

使用knex.js?

我试过这个:

const knex = require('knex')({
  client: 'sqlite3',
  connection: { filename: ':memory:' },
})

async function main() {
  await knex.schema.createTable('table1', table => table.string('field1'))
  await knex.schema.createTable('table2', table => table.string('field2'))
  await knex.insert({ field1: 'value' }).into('table1')
  await knex.insert({ field2: 'value' }).into('table2')
  await knex.from('table1', 'table2')   // first attempt
  await knex.from(['table1', 'table2']) // second attempt
}

main().catch(err => {
  console.error(err)
})

我使用env DEBUG='knex:query'运行该代码并获得此输出:

create table `table1` (`field1` varchar(255))
create table `table2` (`field2` varchar(255))
insert into `table1` (`field1`) values (?)
insert into `table2` (`field2`) values (?)
select * from `table1`
select * from `table1` as `0`, `table2` as `1`

显然,select声明并非我的预期。

PS:

如果您将此问题标记为this one的副本,则不是。{p> 问题的主要观点是不同的,that question中的答案是答案 没有回答我的问题。

2 个答案:

答案 0 :(得分:0)

knex.from('table1').crossJoin('table2')

生成sql select * from table1 cross join table2

我正在使用postgres进行测试,而不是sqlite,但这两个语句的输出结果相同:

select * from table1, table2;
select * from table1 cross join table2;

答案 1 :(得分:0)

对于特定于数据库和任何其他复杂的自定义逻辑,可以始终使用knex.raw

尝试这个(它产生所需的输出):

knex
    .select('*')
    .from(knex.raw('table1, table2'))