SQL如何取同表内的关联数据?
问题描述:
比如说一张表organ内有这样几个字段:
ID | parent_ID | NAME
现在取了上面三个字段后,想通过这条数据的parent_ID取到他的parent_ID的NAME值
我写的是
SELECT a.name,b.name as superior FROM ORGAN a
LEFT JOIN ORGAN b
ON a.PARENT_ID=b.ID
不知道还没有更简洁更快的方法呢?这样等于多并了一张表,查询效率不高
答
可以采用子查询:
SELECT a.name,(select name from ORGAN b where a.PARENT_ID=b.ID) as superior FROM ORGAN a
答
因为涉及到同一个表,所以自关联查询是比较好的方法。
可以直接用内关联而不用左关联。
答
查询速度慢可以考虑是数据量大等原因,可以采取加为表索引等方式。具体情况需要具体分析,你这条sql查询需要多长时间?你可以explain你的sql一下,不管怎么改,查询走方式的都是大致相同的。
答
SELECT a.name,b.name as superior FROM ORGAN a
INNER JOIN ORGAN b
ON a.PARENT_ID=b.ID