2

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

如果我有两个类,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 
4

2 回答 2

2

像您在伪代码中显示的选择列表中的子查询将不起作用,因为该上下文中的子查询必须是标量子查询- 换句话说,它必须只返回一行和一列。

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

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。一些开发人员发现这很难处理(请参阅我在如何分离 SQL 表中的数据中的回答)

另一种方法是执行两个查询:

SELECT p.id, p.name FROM parent p;

SELECT c.id, c.name FROM child c WHERE c.parent_id = ?;

将 p.id 值作为参数提供给第二个查询。

于 2017-11-13T07:06:04.700 回答
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 
于 2017-11-13T04:47:28.197 回答