sql - 在 Knex 中为表别名

标签 sql left-join inner-join knex.js

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

有一个“词”表和一个“用户”表。 Words 表有两个外键,“author_id”和“winner_id”,引用用户表的“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() 方法是否仅用于别名子查询,我不应该期望它用于别名表?

最佳答案

two ways为标识符(表或列)声明别名。可以直接为标识符提供 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"

关于sql - 在 Knex 中为表别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28357228/

相关文章:

php - 在 PDO 中将 1 行连接到多行

一个结果中包含多个值的 MySQL 查询

MySQL在文章日期和评论日期中选择最新的批准日期

具有多个内连接的 Django ORM 查询

java - 数据库中的旧数据不断被新数据替换

Java SQL 查询,最有效的匹配列值检查?

mysql - 为什么这个查询失败了?

mysql - 使用左连接的一对多计数在源表上给出了错误的计数

mysql - 按连接表的多行排序连接查询

sql - 如何在过程执行期间跟踪异常错误消息