在父母和子表上发布'在哪里'

时间:2015-12-18 21:53:29

标签: mysql node.js sequelize.js

我需要通过sequelize(使用mysql)在两个表(父和子)中进行查询。

问题是,当我在父表上使用where子句时,它会丢弃子表上的结果。

在SQL Words中我需要像

这样的东西
SELECT * 
FROM PARENT 
INNER JOIN CHILD 
  ON PARENT.ID = CHILD.PARENTID 
WHERE PARENT.FIELD LIKE 'A' 
  OR CHILD.FIELD LIKE 'A'

相反,sequelize总会返回类似

的内容
SELECT * 
FROM PARENT 
INNER JOIN CHILD 
  ON PARENT.ID = CHILD.PARENTID 
 AND (CHILD.deletedAt IS NULL AND (CHILD.FIELD LIKE 'A')) 
WHERE (PARENT.deletedAt IS NULL AND (PARENT.FIELD LIKE 'A'))

我检查了数据并且子查询带来了结果,但是由于父查询中的where语句,它丢弃了子结果

更新

我的代码类似于:

var childTable = {model:child.model,where.$or:{childField:{$like:'A'}}};
queryOptions = {};
queryOptions.include = [chilldTable];
queryOptions.where = {$or:{parentField:{$like:'A'}}}
Parent.findAll(queryOptions).then(res.send.bind(res))
  .catch(errorHandler(res, next));

现在有人为什么会发生这种情况?

谢谢!

1 个答案:

答案 0 :(得分:4)

只是出于明白目的,我在本页找到了答案:

https://www.bountysource.com/issues/8468317-querying-on-where-association

在阅读了很多论坛和帖子之后,结果是如果我在字段之前和之后设置“$”拼写错误,这会使查询生效......这将是:

var childTable = {model:child.model};
queryOptions = {};
queryOptions.include = [chilldTable];
queryOptions.where = {$or:{parentField:{$like:'A'}, '$childTable.field$':{$like:'A'}}
Parent.findAll(queryOptions).then(res.send.bind(res))
.catch(errorHandler(res, next));