gpt4 book ai didi

sql - 在 Knex 中为表别名

转载 作者:行者123 更新时间:2023-12-03 12:02:34 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com