Nic*_*ckW 5 javascript mysql sequelize.js
我正在使用sequelize 和mysql2,需要从多个列中选择所有不同的值。例如,我有一个“标题”和一个“位置”列。
目前这个:
Job.findAll({
attributes: [
[Sequelize.fn('DISTINCT', Sequelize.col('title')), 'title']
]
})
Run Code Online (Sandbox Code Playgroud)
有效,返回所有不同的职位名称。但是,如果我为位置列添加第二行,则会出现语法错误
Job.findAll({
attributes: [
[Sequelize.fn('DISTINCT', Sequelize.col('title')), 'title'],
[Sequelize.fn('DISTINCT', Sequelize.col('location')), 'location']
]
})
Run Code Online (Sandbox Code Playgroud)
感觉它应该有效,至少从我在文档中读到的内容来看 - 但我对续集没有完全的经验或信心,所以任何帮助将不胜感激。
谢谢
小智 8
我还没有找到一种方法来做到这一点,但是您可以利用这样一个事实:DISTINCT 并不是真正的函数,而是一个语句,并且始终对整个选定的列集进行操作:
Job.findAll({
attributes: [
[Sequelize.fn('DISTINCT', Sequelize.col('title')), 'title'],
'location'
]
})
Run Code Online (Sandbox Code Playgroud)
将生成类似于以下的 SQL
SELECT DISTINCT(`title`) AS `title`, `location` FROM `Jobs`;
Run Code Online (Sandbox Code Playgroud)
但由于 DISTINCT 不是一个函数,所以这实际上与
SELECT DISTINCT (`title`) AS `title`, `location` FROM `Jobs`;
Run Code Online (Sandbox Code Playgroud)
它确实做了你想要的事情,因为列名周围的括号是可选的,那里的查询与
SELECT DISTINCT `title`, `location` FROM `Jobs`;
Run Code Online (Sandbox Code Playgroud)
来源: https: //dzone.com/articles/sql-distinct-is-not-a-function(本文还讨论了 DISTINCT ON PostgreSQL 扩展,如果有人碰巧也需要的话)
请注意,这感觉非常hacky并且有点脆弱,如果Sequelize决定改变生成SQL时应用函数的方式,它可能/可能会崩溃,但它可以在我使用的Sequelize版本(5.22.3)中工作。
| 归档时间: |
|
| 查看次数: |
11030 次 |
| 最近记录: |