如何在 MySQL 中使用 object 数组 属性 查询 object?
How do I query for an object with an object array property in MySQL?
我以前曾以不同的方式看到过这个问题,但我希望得到一个直接的答案。
如果我有两个 类、Parent 和 Child,存储在两个不同的 MySQL 表中,查询完整 Parentobject,附上所有Children?
的列表
例如
class Parent {
id: number;
name: string;
Children: Child[]
}
class Child {
id: number;
name: string;
age: number;
}
如何获取按名称匹配的 Parent 的列表,每个列表都有 children?
我是否必须编写查询来获取所有匹配的 Parent,然后对每个 Parent 进行额外的查询以获取所有 Child 元素?
这显然是 pseudo-SQL,但我希望是这样的:
SELECT p.id, p.name,
(SELECT * from c) as children from parent p LEFT JOIN child c on p.id = c.parent_id
如果您的 parent table 容器 child_id 那么
SELECT p.id, p.name,c.name,c.age from parent p LEFT JOIN child c on p.child_id = c.id
如果您的 child table 包含 parent_id 那么
SELECT p.id, p.name,c.name,c.age from parent p LEFT JOIN child c on p.id = c.parent_id
如果一个 parent 有多个 children 那么
select parent.name,(select group_concat(name,'|',age) from child where child.parent_id = parent.id) as child from parent
select-list 中的子查询就像您在伪代码中显示的那样不起作用,因为该上下文中的子查询必须是 标量子查询——在其他情况下的话,它必须return只有一行和一列。
您可以 return 加入结果集:
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。一些开发人员发现这很难处理(请参阅我在 中的回答)
另一种方法是执行两个查询:
SELECT p.id, p.name FROM parent p;
SELECT c.id, c.name FROM child c WHERE c.parent_id = ?;
提供 p.id 值作为第二个查询的参数。
我以前曾以不同的方式看到过这个问题,但我希望得到一个直接的答案。
如果我有两个 类、Parent 和 Child,存储在两个不同的 MySQL 表中,查询完整 Parentobject,附上所有Children?
的列表例如
class Parent {
id: number;
name: string;
Children: Child[]
}
class Child {
id: number;
name: string;
age: number;
}
如何获取按名称匹配的 Parent 的列表,每个列表都有 children?
我是否必须编写查询来获取所有匹配的 Parent,然后对每个 Parent 进行额外的查询以获取所有 Child 元素?
这显然是 pseudo-SQL,但我希望是这样的:
SELECT p.id, p.name,
(SELECT * from c) as children from parent p LEFT JOIN child c on p.id = c.parent_id
如果您的 parent table 容器 child_id 那么
SELECT p.id, p.name,c.name,c.age from parent p LEFT JOIN child c on p.child_id = c.id
如果您的 child table 包含 parent_id 那么
SELECT p.id, p.name,c.name,c.age from parent p LEFT JOIN child c on p.id = c.parent_id
如果一个 parent 有多个 children 那么
select parent.name,(select group_concat(name,'|',age) from child where child.parent_id = parent.id) as child from parent
select-list 中的子查询就像您在伪代码中显示的那样不起作用,因为该上下文中的子查询必须是 标量子查询——在其他情况下的话,它必须return只有一行和一列。
您可以 return 加入结果集:
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。一些开发人员发现这很难处理(请参阅我在
另一种方法是执行两个查询:
SELECT p.id, p.name FROM parent p;
SELECT c.id, c.name FROM child c WHERE c.parent_id = ?;
提供 p.id 值作为第二个查询的参数。