在父表和子表上添加“where”
我需要在两个表(父母和孩子),通过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语句,它丢弃了子结果
UPDATE
我的代码是这样的:
var childTable = {model:child.model,where.$or:{childField:{$like:'A'}}}; queyrOptions = {}; queryOptions.include = [chilldTable]; queryOptions.where = {$or:{parentField:{$like:'A'}}} Parent.findAll(queryOptions).then(res.send.bind(res)) .catch(errorHandler(res, next));
现在有人为什么这是发生?
谢谢!
那么只为了解目的,我在这个页面中find了答案:
https://www.bountysource.com/issues/8468317-querying-on-where-association
看了很多论坛和post后,结果是,如果我在字段前后设置“$”的错字,这使查询工作…这将是这样的:
var childTable = {model:child.model}; queyrOptions = {}; 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));