查询换行 Knex.js
Query wrap in Knex.js
我们如何将查询打包到联合组中?
我有这个查询:
SELECT * FROM (
(SELECT u1.* FROM `user` AS u1 WHERE user_email IS NOT NULL GROUP BY u1.key)
UNION ALL
(SELECT u2.* FROM `user` AS u2 WHERE user_email IS NULL)
) AS u ORDER BY u.id LIMIT 10
我只能做到这一点:
knex.select('*').from('user').whereNotNull('email').groupBy('user.key')
.unionAll(function() {
this.select('*').from('user as u2').whereNull('u2.email');
}, true)
但这会导致:
SELECT user.* FROM `user` WHERE user.email IS NOT NULL
UNION ALL
(SELECT u2.* FROM `user` AS u2 WHERE email IS NULL)
GROUP BY user.key
这是一个失败。有没有办法做到这一点?我需要类似于第一个查询的东西,因为我需要检索按 id 排序和分页的内容。
当与 groupBy 等结合使用时,unionAll
在 knex 中的工作方式存在很大问题。
所以我会选择 knex.raw
,它对于任何类型的复杂查询组合都非常强大。 knex raw 的好处是您可以对大部分部分使用普通查询构建器,只需将查询的所需部分写为原始查询。
https://runkit.com/embed/905uidg7qdiw
无论如何这是一种方法:
knex.from(
knex.raw('? UNION ALL ? AS u', [
knex('user').select('*').whereNotNull('user_email').groupBy('key'),
knex('user').select('*').whereNull('user_email')
])
).orderBy('u.id').limit(10)
我们如何将查询打包到联合组中?
我有这个查询:
SELECT * FROM (
(SELECT u1.* FROM `user` AS u1 WHERE user_email IS NOT NULL GROUP BY u1.key)
UNION ALL
(SELECT u2.* FROM `user` AS u2 WHERE user_email IS NULL)
) AS u ORDER BY u.id LIMIT 10
我只能做到这一点:
knex.select('*').from('user').whereNotNull('email').groupBy('user.key')
.unionAll(function() {
this.select('*').from('user as u2').whereNull('u2.email');
}, true)
但这会导致:
SELECT user.* FROM `user` WHERE user.email IS NOT NULL
UNION ALL
(SELECT u2.* FROM `user` AS u2 WHERE email IS NULL)
GROUP BY user.key
这是一个失败。有没有办法做到这一点?我需要类似于第一个查询的东西,因为我需要检索按 id 排序和分页的内容。
当与 groupBy 等结合使用时,unionAll
在 knex 中的工作方式存在很大问题。
所以我会选择 knex.raw
,它对于任何类型的复杂查询组合都非常强大。 knex raw 的好处是您可以对大部分部分使用普通查询构建器,只需将查询的所需部分写为原始查询。
https://runkit.com/embed/905uidg7qdiw
无论如何这是一种方法:
knex.from(
knex.raw('? UNION ALL ? AS u', [
knex('user').select('*').whereNotNull('user_email').groupBy('key'),
knex('user').select('*').whereNull('user_email')
])
).orderBy('u.id').limit(10)