【发布时间】:2020-06-30 14:17:08
【问题描述】:
我正在使用 Knex,我想将此原始查询转换为 Knex 语法:
SELECT
t.id,
t.objectId,
t.objectType
FROM (
SELECT
tableA.tableC_Id AS Id,
tableA.id AS objectId,
'TypeA' AS objectType
FROM tableA
UNION
SELECT
tableB.tableC_Id AS Id,
tableB.id AS objectId,
'TypeB' AS objectType
FROM tableB
) t
INNER JOIN tableC ON tableC.id = t.Id
我没有内部连接的尝试:
const qb = di
.get(DatabaseConnection)
.queryBuilder()
.select('*')
.from(() => {
tableA
.queryBuilder()
.select([
{ id: tableA.col('Id') },
{ objectId: tableA.col('id') },
{ objectType: connection.raw('\'TypeA\'') },
])
.union([
tableB
.queryBuilder()
.select([
{ id: tableB.col('Id') },
{ objectId: tableB.col('id') },
{ objectType: tableB.raw('\'TypeB\'') },
])
])
.as('t');
});
但 Knex 将其翻译为
选择 * FROM (选择 * )
。我不喜欢使用原始 SQL 查询,这可能吗?
【问题讨论】:
-
您使用的是什么语法?至少它不是普通的 knex。
-
这是打字稿,有很多自定义,但现在可以使用了,谢谢。
标签: typescript subquery knex.js