mySQL 优雅的自连接

标签 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;

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

谢谢。

最佳答案

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

关于mySQL 优雅的自连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21797491/

相关文章:

sql - 将同一列和表中具有相似值和总和值的行组合起来

sql - 使用 osql 运行查询

sql - mysql 触发器到 oracle 触发器

sql - 使用电子邮件地址作为主键?

MySQL:为什么我必须指定在该列上连接表时要使用的表列?

mysql - 从 csv 加载数据时如何忽略/跳过 LOAD DATA INFILE 中的无效数据行。

mysql - SQL 中部分数据的平均值

mysql - 按 SQL IN() 子句中值的顺序排序

mysql - 尝试编写复杂的查询来检索数据

mysql - 如何更新 MySQL 表字段,其中 2 列匹配(电子邮件)但另一组列(成员 ID)未同步