Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mySQL自连接优雅_Mysql_Sql - Fatal编程技术网

mySQL自连接优雅

mySQL自连接优雅,mysql,sql,Mysql,Sql,我的问题有点傻,但SQL从来都不是我喜欢的。 我有一个包含3列的简单表:id、name、parent\u 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; 并做了一些测试,但我发现它存

我的问题有点傻,但SQL从来都不是我喜欢的。 我有一个包含3列的简单表:
id、name、parent\u 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.

此查询最好通过使用
左连接来实现。这样,您仍然可以返回没有父id的字段,即
NULL
。您还需要使用别名选择
parent\u name
parent\u name
)。这将允许您以编程方式通过其名称而不是数字列索引引用结果(
$row->parent\u name
vs
$row[2]
,如果您选择PHP语言)


请发布您尝试过的代码。然后我可以帮助您更正
左连接的+1。OP的原始查询中已经有3个不同的列别名(
id
name
parent\u id
)。谢谢!正是我需要的。
SELECT A.id AS ID, A.name AS Name, B.name AS Parent
FROM fields A, fields B
WHERE A.parent_id = B.id
SELECT f1.id, f1.name, f2.name parent_name
FROM fields f1
LEFT JOIN fields f2 ON f2.id = f1.parent_id