![](/img/trans.png)
[英]How to use IN operator with AND operator in WHERE clause in SQL…?
[英]How to use an operator in where clause with an optional include?
我有以下型號:
AuthorModel.hasMany(BookModel);
BookModel.belongsTo(AuthorModel);
有些作者沒有書。
我想選擇一個作者,他的一本書的名字或頭銜與搜索字符串相匹配。
我可以通過以下聲明來實現這一點,但僅限於在BookModel中擁有書籍的作者
Author.findOne({
include: [{
model: Book,
where: {
[Op.or]: [
{'$author.name$': 'search string'},
{ title: 'search string'}
]
},
}]
})
這給了我或多或少的以下mysql
查詢:
SELECT
`author`.`name`,
`book`.`title`
FROM `author` INNER JOIN `book`
ON `author`.`id` = `book`.`authorId`
AND ( `author`.`name` = 'search string' OR `book`.`title` = 'search string');
這里的問題是,如果作者沒有書籍,那么結果是空的。 即使有作者符合搜索條件。
我試圖將include設置為required: false
,它給出了一個left outer join
。 在這種情況下,我得到一些不匹配的結果。 省略了where子句。
我如何更改我的sequelize
查詢,或者什么是正確的mysql
查詢?
MySql查詢可能應該是這樣的
SELECT
`author`.`name`,
`book`.`title`
FROM `author` LEFT JOIN `book`
ON `author`.`id` = `book`.`authorId`
WHERE ( `author`.`name` = 'search string' OR `book`.`title` = 'search string')
注意這里的過濾條件是如何在WHERE
而不是JOIN ... ON
子句的一部分
基於Top級別的示例,在那里使用急切加載的模型,你可能會看到類似的問題
Author.findOne({
where: {
[Op.or]: [
{'$author.name$': 'search string'},
{ '$Book.title$': 'search string'}
]
},
include: [{
model: Book,
required: false
}]})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.