如何在MySQL中查询具有对象数组属性的对象?

时间:2017-11-13 04:39:46

标签: mysql sql subquery database-abstraction

我以前以不同的方式看过这个问题,但我希望得到一个直接的答案。

如果我有两个类,Parent和Child,存储在两个不同的MySQL表中,查询完整的Parent对象的最佳方法是什么,并列出所有Children?

e.g。

class Parent {
   id: number;
   name: string;
   Children: Child[]
}

class Child {
   id: number;
   name: string;
   age: number;
}

如何按名称获取匹配的父母列表,并列出每个父项的列表?

我是否必须编写查询以获取所有匹配的Parent,然后为每个Parent创建一个额外的查询以获取所有Child元素?

这显然是伪SQL,但我希望这样的事情:

SELECT p.id, p.name, 
(SELECT * from c) as children from parent p LEFT JOIN child c on p.id = c.parent_id 

2 个答案:

答案 0 :(得分:1)

您在伪代码中显示的select-list中的子查询无法工作,因为该上下文中的子查询必须是标量子查询 - 换句话说,它必须只返回一个行和一列。

您可以返回连接的结果集:

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值作为参数提供给第二个查询。

答案 1 :(得分:0)

如果你的父表容器是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