Mysql 续集';其中';关于父表和子表

Mysql 续集';其中';关于父表和子表,mysql,node.js,sequelize.js,Mysql,Node.js,Sequelize.js,我需要通过sequelize(使用mysql)在两个表(父表和子表)中进行查询 问题在于,当我在父表上使用where子句时,它会丢弃子表上的结果 用SQL的话来说,我需要 SELECT * FROM PARENT INNER JOIN CHILD ON PARENT.ID = CHILD.PARENTID WHERE PARENT.FIELD LIKE 'A' OR CHILD.FIELD LIKE 'A' SELECT * FROM PARENT INNER JOIN

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

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

用SQL的话来说,我需要

SELECT * 
FROM PARENT 
INNER JOIN CHILD 
  ON PARENT.ID = CHILD.PARENTID 
WHERE PARENT.FIELD LIKE 'A' 
  OR CHILD.FIELD LIKE 'A'
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'))
相反,sequelize总是返回如下内容

SELECT * 
FROM PARENT 
INNER JOIN CHILD 
  ON PARENT.ID = CHILD.PARENTID 
WHERE PARENT.FIELD LIKE 'A' 
  OR CHILD.FIELD LIKE 'A'
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));
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));
有人知道为什么会这样吗


谢谢

仅出于了解的目的,我在本页找到了答案:

在阅读了大量关于的论坛和帖子后,结果是,如果我在字段前后设置“$”打字错误,这将使查询正常工作。。。它将类似于:

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));
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));

好吧,仅出于了解的目的,我在本页找到了答案:

在阅读了大量关于的论坛和帖子后,结果是,如果我在字段前后设置“$”打字错误,这将使查询正常工作。。。它将类似于:

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));
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));

内部联接跳过空结果。您是否尝试了“左联接”?是否可以共享您的
sequelize
code?内部联接跳过空结果。您是否尝试过“左加入”?能否共享您的
sequelize
代码?