我很难将特定的MySQL查询复制到Knex中(我使用书架作为ORM)。 SQL查询从数据库返回所有表的元数据。
MySQL查询
SELECT
T.TABLE_NAME,
C.COLUMN_NAME,
C.COLUMN_TYPE,
N.CONSTRAINT_TYPE,
K.REFERENCED_TABLE_NAME,
K.REFERENCED_COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLES T
LEFT JOIN
INFORMATION_SCHEMA.COLUMNS C USING (TABLE_SCHEMA , TABLE_NAME)
LEFT JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE K USING (TABLE_SCHEMA , TABLE_NAME , COLUMN_NAME)
LEFT JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS N USING (TABLE_SCHEMA , TABLE_NAME , CONSTRAINT_NAME)
WHERE
TABLE_TYPE = 'BASE TABLE'
AND TABLE_SCHEMA = 'sakila'
ORDER BY T.TABLE_NAME
此查询返回数据库的每个表与每个表的架构有关的详细信息之间的关系。我不知道使用knex进行此操作的正确方法。
我尝试使用knex编写查询,但是INFORMATION_SCHEMA.KEY_COLUMN_USAGE,INFORMATION_SCHEMA.TABLE_CONSTRAINTS是MySQL客户端非常特定的内容,但是我的用例要求我即使对于MS SQL也要使用它。而且关于knex的INFORMATION_SCHEMA用法的文档很少。
感谢您提供任何见解-非常感谢。
答案 0 :(得分:0)
类似的事情可能会起作用:
knex('TABLES as T')
.withSchema('INFORMATION_SCHEMA')
.select(
'T.TABLE_NAME',
'C.COLUMN_NAME',
'C.COLUMN_TYPE',
'N.CONSTRAINT_TYPE',
'K.REFERENCED_TABLE_NAME',
'K.REFERENCED_COLUMN_NAME'
)
.join('COLUMNS as C',
builder => builder
.on('T.TABLE_SCHEMA', 'C.TABLE_SCHEMA')
.on('T.TABLE_NAME', 'C.TABLE_NAME')
)
... rest of joins ...
.where('TABLE_TYPE', 'BASE TABLE')
.where('TABLE_SCHEMA','sakila')
.orderBy('T.TABLE_NAME')