[英]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在unionAll
工作方式存在很大問題。
因此,我將使用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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.