mySQL自我优雅地加入

时间:2014-02-15 12:23:37

标签: mysql sql

我的问题有点虚伪,但SQL从未成为我的一杯茶。 我有一个包含3列的简单表:id, name, parent_id(指同一个表中的id)。

我只想获得相关结果,以便在HTML页面中显示它们: ID /姓名/父姓

我可以查询如下:

select id, name, parent_id from fields
union
select a.id, a.name, b.name
from fields a, fields b
where b.parent_id = a.id;

并做一些测试,但我可以发现它存在一些更优雅的方式。

THX。

2 个答案:

答案 0 :(得分:2)

使用LEFT JOIN可以最好地实现此查询。这样,您仍然可以返回没有parent_id的字段,即NULL。您还需要使用别名(示例中的parent_name)选择parent_name。如果PHP是您选择的语言,这将允许您以编程方式通过名称而不是数字列索引($row->parent_name vs $row[2]来引用结果)。

SELECT f1.id, f1.name, f2.name parent_name
FROM fields f1
LEFT JOIN fields f2 ON f2.id = f1.parent_id

http://sqlfiddle.com/#!2/a9632/1/0

答案 1 :(得分:0)

SELECT A.id AS ID, A.name AS Name, B.name AS Parent
FROM fields A, fields B
WHERE A.parent_id = B.id