SQL连接可能。一对一对多

时间:2013-08-10 18:00:23

标签: sql database join

我有三个sql表fname,lname和children:

fname(id INT, fname TEXT)

lname(id INT, lname TEXT, childid INT)

children( childid INT, Name)

我希望能够查询并查看类似的输出:

John Doe Jane
John Doe Cynthia
May Jane Paul
Mary Jane Peter
Jimmy Smith Chris

John来自fname,而Doe来自lname,基于ID字段。然后我希望他所有的孩子都基于childid字段。其他人也一样。

谢谢,

2 个答案:

答案 0 :(得分:1)

SELECT fn.fname, ln.lname, c.Name
FROM fname fn
JOIN lname ln ON ln.id = fn.id
LEFT JOIN children c ON c.childid = ln.childid

但是,我认为你应该重新考虑你的设计。

我会考虑类似的事情:

Person (id INT, fname TEXT, lname TEXT, parentId INT NULL);

这样,您的查询应如下所示:

SELECT p.fname, p.lname, c.fname
FROM Person p
LEFT JOIN Person c ON c.parentId = p.Id
WHERE p.parentId = NULL

答案 1 :(得分:0)

SELECT
    CONCAT(`fname`.`fname`, `lname`.`lname`, `children`.`name`)        
FROM `fname`
INNER JOIN `lname`
    ON `fname`.`id` = `lname`.`id`
INNER JOIN `children`
    ON `lname`.`childid` = `children`.`childid`