2

我有一张桌子,例如

catid | parentcatid | dirname
  4   |      0      | mobiles 
 243  |      4      | Nokia

当我得到catid = 243我需要带走mysql_query (catid=parentcatid)

243 | mobiles | Nokia

我可以先选择catid,parentcatiddirnamewhere id=243,然后选择相同的 where parentcatid = catid,但是

如何进行这个单一查询?

4

3 回答 3

5

JOIN表两次:

SELECT
  t2.catid, t1.dirname 'dirname', t2.dirname 'parentname'
FROM Tablename t1
INNER JOIN Tablename t2 ON t1.catid = t2.parentcatid
WHERE t2.catid = 243;

SQL 小提琴演示

这会给你:

| CATID | DIRNAME | PARENTNAME |
--------------------------------
|   243 | mobiles |      Nokia |
于 2013-01-15T14:34:07.690 回答
3

使用自联接:

SELECT parent.catid, parent.dirname
FROM yourtable AS parent
LEFT JOIN yourtable AS child ON (child.parentcatid = parent.catid)
WHERE child.catid = 243
于 2013-01-15T14:34:39.817 回答
0

您的问题的字面答案是使用自联接(正如 Marc B 所建议的那样)。

在字里行间阅读,我假设您事先不知道您的层次结构将有多深 - 这使得自我加入不太有用,因为如果您必须继续加入以获得更深层次的树,如果不是树的所有部分都进入相同的深度,您可能需要用户外部连接。

另一种方法——要复杂得多,并且只有在我的假设为真时才这样做——是使用递归函数,或者将您的数据表示为嵌套集

于 2013-01-15T14:40:22.077 回答