当前位置: 首页 > 面试题库 >

别名在Knex中的表

薛焱
2023-03-14
问题内容

我有一个SQL查询,该查询两次引用同一张表,因此我需要将该表别名为两个单独的别名。我不太清楚如何与Knex一起编写。

有一个“单词”表和一个“用户”表。Words表具有两个外键,即“ author_id”和“ winner_id”,引用了Users表的“ id”列。

这是我要在Knex中编写的SQL:

SELECT w.*, ua.name, uw.name FROM Words AS w
INNER JOIN Users AS ua ON w.author_id = ua.id 
LEFT JOIN Users AS uw ON w.winner_id = uw.id

我对如何在Knex中做到这一点有些迷惑。我的第一次尝试不涉及别名,因此出现了“表使用多次”错误。当我尝试使用.as()方法时,knex抱怨缺少.from()子句。.as()方法仅用于别名子查询,我不应该期望它用于别名表吗?


问题答案:

有两种方法来声明标识符的别名(表或列)。一个人可以直接给标识符加上aliasName作为后缀(例如,identifierName作为aliasName),或者一个人可以传递一个对象{aliasName:’identifierName’}。

因此,以下代码:

 knex.select('w.*', 'ua.name', 'uw.name')
  .from({ w: 'Words' })
  .innerJoin({ ua: 'Users' }, 'w.author_id', '=', 'ua.id')
  .leftJoin({ uw: 'Users' }, 'w.winner_id', '=', 'uw.id')
  .toString()

将编译为:

select "w".*, "ua"."name", "uw"."name"
from "Words" as "w"
inner join "Users" as "ua" on "w"."author_id" = "ua"."id"
left join "Users" as "uw" on "w"."winner_id" = "uw"."id"


 类似资料:
  • knex.js A SQL query builder that is flexible, portable, and fun to use! A batteries-included, multi-dialect (MSSQL, MySQL, PostgreSQL, SQLite3, Oracle (including Oracle Wallet Authentication)) query b

  • 我已经将完全相同的数据库表从MYSQL移到SQLite。以下查询在MYSQL中工作 但在SQLITE中,我得到一个“Error near'”。语法错误。使用cast到c的表别名,查询工作良好: Sqlite不喜欢查询的第一个版本的原因是什么?

  • 问题内容: 为什么以下查询不起作用?Mysql抱怨z-我不能在WHERE子句中使用别名吗? 我得到的错误是: 问题答案: http://dev.mysql.com/doc/refman/5.0/en/problems-with- alias.html 标准SQL不允许在WHERE子句中引用列别名。之所以施加此限制,是因为在评估WHERE子句时,可能尚未确定列值。例如,以下查询是非法的: 试试这个,

  • 我不确定似乎是什么问题,但这种膝盖迁移失败了。尽管我是编写迁移的新手,但我坚信此迁移文件是正确的。生成的错误如下 代码如下。最初,这些迁移函数在单独的文件中,我认为它失败了,因为文件没有同步执行,这导致我编写了一个文件。我不确定这是否有帮助,但是当我删除包含外键引用(UserRoles、RolePer的、令牌)的表的代码时,其余的似乎都在工作。

  • 我有一个带有左连接的SELECT语句,连接的表是子查询。Oracle无法识别第二个子查询中第一个子查询的别名。它适用于DB2,但不适用于Oracle。我如何实现它或重写我的查询? Oracle错误消息:ORA-00904:“B”。“C3”:无效标识符

  • 我如何用JOOQ表示以下PostgreSQL语法? Jooq的函数需要类型作为其参数,但是函数返回类型?