如何在 MySQL 中查询具有对象数组属性的对象?
Posted
技术标签:
【中文标题】如何在 MySQL 中查询具有对象数组属性的对象?【英文标题】:How do I query for an object with an object array property in MySQL? 【发布时间】:2018-04-25 17:05:14 【问题描述】:我以前曾以不同的方式看到过这个问题,但我希望得到一个直接的答案。
如果我有两个类,Parent 和 Child,存储在两个不同的 mysql 表中,查询完整 Parent 对象的最佳方法是什么,以及所有 Child 的列表?
例如
class Parent
id: number;
name: string;
Children: Child[]
class Child
id: number;
name: string;
age: number;
如何按名称获取匹配的父母列表,以及每个孩子的列表?
我是否必须编写一个查询来获取所有匹配的父级,然后为每个父级编写一个附加查询以获取所有子级元素?
这显然是伪 SQL,但我希望是这样的:
SELECT p.id, p.name,
(SELECT * from c) as children from parent p LEFT JOIN child c on p.id = c.parent_id
【问题讨论】:
【参考方案1】:选择列表中的子查询(如您在伪代码中显示的那样)将不起作用,因为该上下文中的子查询必须是 标量子查询——换句话说,它必须只返回一行并且一栏。
您可以返回一个连接的结果集:
SELECT p.id, p.name, c.id, c.name
FROM parent p LEFT JOIN child c on p.id = c.parent_id;
但这会为每一行重复相同的 p.id 和 p.name。一些开发人员发现这很难处理(请参阅我在 How to separate data in SQL table 中的回答)
另一种方法是执行两个查询:
SELECT p.id, p.name FROM parent p;
SELECT c.id, c.name FROM child c WHERE c.parent_id = ?;
将 p.id 值作为参数提供给第二个查询。
【讨论】:
【参考方案2】:如果你的父表容器 child_id 那么
SELECT p.id, p.name,c.name,c.age from parent p LEFT JOIN child c on p.child_id = c.id
如果您的子表包含 parent_id 则
SELECT p.id, p.name,c.name,c.age from parent p LEFT JOIN child c on p.id = c.parent_id
如果父母有多个孩子,那么
select parent.name,(select group_concat(name,'|',age) from child where child.parent_id = parent.id) as child from parent
【讨论】:
我认为你错过了重点......父母可以有多个孩子。以上是关于如何在 MySQL 中查询具有对象数组属性的对象?的主要内容,如果未能解决你的问题,请参考以下文章