我有关于内连接、左连接命令的问题。
我的类别表是:
身份证 | 家长 | 标题 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
但它不起作用。
我有关于内连接、左连接命令的问题。
我的类别表是:
身份证 | 家长 | 标题 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
但它不起作用。
您必须使用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演示
如果您想获取所有父类别,请尝试查询
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;
我没有测试上面的代码,但它应该可以正常工作。
您始终可以通过将 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