SQL:加入main-result和children

时间:2014-06-02 19:47:42

标签: sql

我尝试合并两个SQL查询,但是我失败了。

该表包含列" id,bid,data1,data2,data3,parent"。

第一个查询将为我提供行和数据的ID(按出价选择):

SELECT id, data1, data2, data3 FROM table WHERE bid = :bid LIMIT 1

此id将用于获取第一个结果的子项的所有行的数据:

SELECT data1, data2, data3 FROM table WHERE parent = :id

作为我的结果,我只需要将main-part(query1)的data1,data2和data3以及所有子(query2)放在一个结果中...

我试过这个:

SELECT 
    main.data1 as data1, 
    main.data2 as data2, 
    main.data3 as data3
FROM table main 
LEFT JOIN table children ON main.id = children.parent
WHERE bid = :bid

我做错了什么?

2 个答案:

答案 0 :(得分:0)

试试这个......

SELECT 
    main.data1 as data1, 
    main.data2 as data2, 
    main.data3 as data3
FROM table main 
LEFT JOIN table children 
ON main.parent = children.id

答案 1 :(得分:0)

要获取父子数据,您必须在列列表中选择两者。此外,您必须使bid符合父母或子女表的资格。作为最后一部分,使用left join还会选择没有子项的行

select p.data1 as p1, p.data2 as p2, p.data3 as p3,
       c.data1 as c1, c.data2 as c2, c.data3 as c3
from t1 p
join t1 c on c.parent = p.id
where p.bid = :bid

SQLFiddle


我没有看到在单个查询中获取父行和子行的方法。你可以做的是一个union,它在第一个查询中获取父行,在第二个部分中获取所有子行

select p.data1, p.data2, p.data3
from t1 p
where p.bid = :bid
union
select c.data1, c.data2, c.data3
from t1 p
join t1 c on c.parent = p.id
where p.bid = :bid

SQLFiddle