【问题标题】:Sequelize 'where' on parent and child tables续集父表和子表上的“位置”
【发布时间】:2015-12-18 21:53:29
【问题描述】:

我需要通过 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'

相反,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));

现在有人知道为什么会这样吗?

谢谢!

【问题讨论】:

  • 内连接跳过空结果。你试过“左加入”吗?
  • 你能分享你的sequelize代码吗?

标签: mysql node.js sequelize.js


【解决方案1】:

仅用于了解目的,我在此页面中找到了答案:

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

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多