我以前以不同的方式看过这个问题,但我希望得到一个直接的答案。
如果我有两个类,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
答案 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