将mysql查询转换成等价于knex的语法?

ccgok5k5  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(405)

我很难将一个特定的mysql查询复制到knex中(我使用bookshelf作为orm)。sql查询从数据库返回所有表的元数据。
mysql查询

  1. SELECT
  2. T.TABLE_NAME,
  3. C.COLUMN_NAME,
  4. C.COLUMN_TYPE,
  5. N.CONSTRAINT_TYPE,
  6. K.REFERENCED_TABLE_NAME,
  7. K.REFERENCED_COLUMN_NAME
  8. FROM
  9. INFORMATION_SCHEMA.TABLES T
  10. LEFT JOIN
  11. INFORMATION_SCHEMA.COLUMNS C USING (TABLE_SCHEMA , TABLE_NAME)
  12. LEFT JOIN
  13. INFORMATION_SCHEMA.KEY_COLUMN_USAGE K USING (TABLE_SCHEMA , TABLE_NAME , COLUMN_NAME)
  14. LEFT JOIN
  15. INFORMATION_SCHEMA.TABLE_CONSTRAINTS N USING (TABLE_SCHEMA , TABLE_NAME , CONSTRAINT_NAME)
  16. WHERE
  17. TABLE_TYPE = 'BASE TABLE'
  18. AND TABLE_SCHEMA = 'sakila'
  19. ORDER BY T.TABLE_NAME

此查询返回数据库的每个表之间的关系以及每个表的架构的详细信息。我不知道用knex做这件事的正确方法。
我尝试用knex编写查询,但是information\u schema.key\u column\u usage、information\u schema.table\u约束对于mysql客户机来说是非常特殊的,但是我的用例要求我甚至对mssql也使用它。关于knex的schema用法的信息也没有太多的文档。
感谢您的真知灼见-非常感谢。

u3r8eeie

u3r8eeie1#

像这样的方法可能有用:

  1. knex('TABLES as T')
  2. .withSchema('INFORMATION_SCHEMA')
  3. .select(
  4. 'T.TABLE_NAME',
  5. 'C.COLUMN_NAME',
  6. 'C.COLUMN_TYPE',
  7. 'N.CONSTRAINT_TYPE',
  8. 'K.REFERENCED_TABLE_NAME',
  9. 'K.REFERENCED_COLUMN_NAME'
  10. )
  11. .join('COLUMNS as C',
  12. builder => builder
  13. .on('T.TABLE_SCHEMA', 'C.TABLE_SCHEMA')
  14. .on('T.TABLE_NAME', 'C.TABLE_NAME')
  15. )
  16. ... rest of joins ...
  17. .where('TABLE_TYPE', 'BASE TABLE')
  18. .where('TABLE_SCHEMA','sakila')
  19. .orderBy('T.TABLE_NAME')
展开查看全部

相关问题