首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成错误查询

生成错误查询
EN

Stack Overflow用户
提问于 2022-11-10 20:39:01
回答 1查看 22关注 0票数 0

我在用Knex做这样的查询。

代码语言:javascript
运行
复制
  const query = knex
  .select('ue.username', 'ue.permission', 'ue.status')
  .from('user_entity as ue')
  .join('device_entity as de', function () {
    this
      .on('de.username', '=', 'ue.username')
      .andOn({'de.deleted': ''})
      .andOn({'de.token': token})
      .andOn({'de.uid': uid});
  })
  .where({'ue.deleted': ''})

Node.js控制台显示了这一点。在标记条件下,由于某种原因,将生成(‘)并将(’‘)替换为(“"),查询正常工作。但我不明白他为什么用(‘’)生成SQL

代码语言:javascript
运行
复制
select `ue`.`username`, `ue`.`permission`, `ue`.`status` 
from `user_entity` as `ue` 
inner join `device_entity` as `de` 
    on `de`.`username` = `ue`.`username` 
    and `de`.`deleted` = `` 
    and `de`.`token` = `C0AbKXv2ffWS7w` 
    and `de`.`uid` = `F8F9C9A8-06CC-40E4-AE8E-75FE7FA6BB57` 
where `ue`.`deleted` = ''

SQL应该是..。

代码语言:javascript
运行
复制
select `ue`.`username`, `ue`.`permission`, `ue`.`status` 
from `user_entity` as `ue` 
inner join `device_entity` as `de` 
    on  `de`.`username` = `ue`.`username` 
    and `de`.`deleted` = ''
    and `de`.`token` = 'C0AbKXv2ffWS7w'
    and `de`.`uid` = 'F8F9C9A8-06CC-40E4-AE8E-75FE7FA6BB57'
where `ue`.`deleted` = ''

带有内部联接但Knex的查询在“内部连接的条件(和)”中生成(‘’)而不是(“")。

EN

回答 1

Stack Overflow用户

发布于 2022-11-18 07:07:06

on子句基本上将所有内容解析为列名,因此您的所有值都用`包装,用于mysql标识符,如表名或列名。

如果您使用类型记录,或者使用javascript来支持像vscode这样的解析类型记录语法,那么您可以签出.join()的类型定义。

代码语言:javascript
运行
复制
interface JoinClause {
    on(raw: Raw): JoinClause;
    on(callback: JoinCallback): JoinClause;
    on(columns: { [key: string]: string | Raw }): JoinClause; // <--------
    on(column1: string, column2: string): JoinClause;
    on(column1: string, raw: Raw): JoinClause; // <-----------------------
    ...
}

如您所见,字符串参数是column*。如果要根据非列值添加条件,则应使用Raw值通过knex.raw()传递。

代码语言:javascript
运行
复制
knex("user_entity as ue")
  .select('ue.username', 'ue.permission', 'ue.status')
  .join('device_entity as de', (j)=> (
    j
      .on('de.username', '=', 'ue.username')
      .andOn({'de.deleted': knex.raw("?","")})
      .andOn({'de.token': knex.raw("?","iMoENdVC5hSUwr")})
      .andOn({'de.uid': knex.raw("?","TPB4.220624.004")})
  ))
  .where({'ue.deleted': ''})

康奈游乐场

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74395075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档