我有这个表结构:
id
name
email
child_id <- pointing to id from "child" table
如何选择此表数据并使用SINGLE QUERY传播select给所有子项?
答案 0 :(得分:3)
如果您假设您正在使用具有自己的名称和ID字段的子表,您可以写...
select c.name as child_name, p.name as parent_name
from child c
join parent p
on c.id = p.child_id
我使用以下SQL创建了SQLFiddle:
CREATE TABLE "parent" (
"id" INTEGER PRIMARY KEY,
"name" TEXT,
"email" TEXT,
"child_id" INTEGER
);
CREATE TABLE "child" (
"id" INTEGER PRIMARY KEY,
"name" TEXT
);
INSERT INTO parent
(id, name, email, child_id )
VALUES
(1, "Jim", "pineapple@fruit.com", 1 ),
(2, "Jane", "gizmo@gadget.com", 1 ),
(3, "Grover", "monty@python.com", 2 );
INSERT INTO child
(id, name)
VALUES
(1, "Ben" ),
(2, "Samantha" ),
(3, "Carl" );
然而,这个数据结构限制你只对每个孩子的孩子,尽管我为其中一个孩子展示了2个父母。如果您想要多个子条目而不必复制父条目,那么您需要为父子关系建立第三个表。该表将有一个parent_id,一个child_id,并且有不同的思想关于是否需要它自己的id(它使得在关系表中选择特定行变得容易,如果关系本身获得额外的字段则变得更加重要) 。您的查询需要将所有表连接到关系表,如果您这样做,那么该部分可能如下所示:
from relationship r
join parent p
on p.relation_id = r.parent_id
join child c
on c.relation_id = r.child_id