gpt4 book ai didi

sql - 使用 .whereIn 查找空值

转载 作者:行者123 更新时间:2023-12-01 00:11:27 26 4
gpt4 key购买 nike

我使用 Knex 构建了一个查询,如下所示:

knex('discounts')
.where((builder) => {
builder
.where('product_code', productCode)
.where((builder1) => {
builder1
.andWhere('account_code', customer)
.orWhere('account_code', null);
});
})
.select('*');

一切正常,但我觉得 .where 语句太长所以尝试使用 .whereIn 函数,然后我意识到它没有工作:

knex('discounts')
.where((builder) => {
builder
.where('product_code', productCode)
.whereIn('account_code', [customer, null]);
})
.select('*');

我知道我们不能在原始 SQL 中将 nullIN 一起使用,应该这样做:

WHERE 
(columnName IN ('value1', 'value2', 'value3') OR columnName IS NULL)

我的问题:我的初始查询是实现此目的的唯一方法,还是有其他方法可以在使用 Knex 时将 .whereInnull 一起使用?

最佳答案

你对第一个查询是正确的,额外的内联函数是不必要的。如果我正确理解您的要求,这里实际上只需要一个分组。所以这很好:

db("discounts")
.where("product_code", productCode)
.where(qb =>
qb.where("account_code", customer).orWhereNull("account_code")
)

这会生成以下 SQL:

SELECT * FROM "discounts"
WHERE "product_code" = ?
AND ("account_code" = ? OR "account_code" IS NULL)

如果你想更明确,你可以使用.andWhere,但它不会改变生成的SQL:

  .where("product_code", productCode)
.andWhere(qb =>

顺便说一句(如果您还没有发现),您可以通过向其中添加 .debug() 来查看将为任何 Knex 链执行的 SQL。如果您正在重构或只是好奇,这会很方便。

关于sql - 使用 .whereIn 查找空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58387492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com