代码之家  ›  专栏  ›  技术社区  ›  LongHike

如何让SQL和alias一起留在书架上?

  •  0
  • LongHike  · 技术社区  · 6 年前

    我需要这个 SQL (在mysql控制台中工作得很好):

    SELECT LEFT(authors.last_name,1) AS first_char
    

    "bookshelf.js" .

    当我走到这一步时:

    let result = await qb.column('last_name').select().from('authors').as('first_char');
    

    我找不到

    let result = await qb.column('last_name').select('LEFT(authors.last_name,1)').from('authors').as('first_char');
    

    正在进行中。

    会导致以下错误:

    Error: ER_BAD_FIELD_ERROR: Unknown column 'LEFT(authors.last_name,1)' in 'field list'
    

    这对我来说毫无意义,因为 authors.last_name 还在那里。

    1 回复  |  直到 6 年前
        1
  •  0
  •   devius    6 年前

    .select() 防止SQL注入,因此您不能将随机SQL传递给它并期望它正常工作。您需要使用原始表达式:

    qb.column('last_name').select(qb.raw('LEFT(authors.last_name,1)')).from('authors').as('first_char');
    

    从技术上讲,这不是一个书架问题,因为查询生成器只是knex。