0

我有关于内连接、左连接命令的问题。

我的类别表是:

身份证 | 家长 | 标题
1 | 0 | 第一类
2 | 1 | 其他类别

我有列表类别,我想在 sql 命令中获取父母类别标题。

我努力了:

SELECT cat.ID, cat.title, cat2.title as parentcatname, cat.parent
FROM   categories cat INNER JOIN categories cat2 ON cat2.ID=cat.parent

但它不起作用。

4

3 回答 3

2

您必须使用LEFT JOIN才能拉出所有类别,无论它们是否有父类别。INNER JOIN过滤掉所有的不匹配。

SELECT c.id, c.title, c.parent, p.title parent_title 
  FROM categories c LEFT JOIN categories p 
    ON c.parent = p.id

输出:

| 身份证 | 标题 | 家长 | PARENT_TITLE |
-------------------------------------------------
| 1 | 第一类 | 0 | (空) |
| 2 | 其他类别 | 1 | 第一类 |

这是SQLFiddle演示

于 2013-07-19T14:30:21.077 回答
0

如果您想获取所有父类别,请尝试查询

SELECT cat_id FROM categories WHERE parent=0;

如果您想获取某个类别的父类别

SELECT C.cat_id, P.title FROM categories C LEFT JOIN categories P ON P.parent=C.cat_id;

我没有测试上面的代码,但它应该可以正常工作。

于 2013-07-19T14:31:08.363 回答
0

您始终可以通过将 SQL 输入验证器(在线加载)、phpMyAdmin 的 SQL 选项卡或带有 SQL 验证的编辑器来调试您的 SQL。在我看来,您的类别表选择附近有一个小错字。

如果您的 SQL 不起作用,请务必将其降低。请注意,联接(内部、左侧、右侧等)旨在联接两个或更多表。

SELECT 
    one.ID, one.title, one.parent, one.title, one.parent, one.title
FROM 
    categories one 
LEFT JOIN 
    categories two
ON 
    one.parent = two.ID
于 2013-07-19T14:32:31.490 回答