单个查询SELECT传播到子级

时间:2015-08-07 13:44:07

标签: php sqlite

我有这个表结构:

id
name
email
child_id <- pointing to id from "child" table

如何选择此表数据并使用SINGLE QUERY传播select给所有子项?

1 个答案:

答案 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" );

我的选择查询然后给了我: enter image description here

然而,这个数据结构限制你只对每个孩子的孩子,尽管我为其中一个孩子展示了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