我正在尝试构建一个提供这些结果的SQL查询:
| Category Title | Subcategory Of |
-----------------------------------
| Category 1 | |
| Category 2 | |
| Category 3 | |
| Category 4 | |
| Category 5 | |
| Category 6 | Category 4 |
| Category 7 | Category 5 |
这就是我的数据库:
CREATE TABLE `categories` (
`category_id` int(4) NOT NULL AUTO_INCREMENT,
`subcategory_id` int(4) NOT NULL,
`category_title` longtext COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`category_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `categories` (`category_id`, `subcategory_id`, `category_title`) VALUES
(1, 0, 'Category 1'),
(2, 0, 'Category 2'),
(3, 0, 'Category 3'),
(4, 0, 'Category 4'),
(5, 0, 'Category 5'),
(6, 4, 'Category 6'),
(7, 5, 'Category 7');
我认为你会使用JOIN,但我无法在心理上想到要运行什么样的查询,因为据我所知JOIN是加入两个表,而不是两个列。我是这些高级查询的新手(虽然我很喜欢INSERT,UPDATE,DELETE等)。任何帮助表示赞赏。
这就是我的尝试,这没有任何意义。
SELECT * FROM categories RIGHT JOIN categories ON subcategory_id = category_id
答案 0 :(得分:1)
它被称为自我加入。您在查询中包含两次表名,但是给它两个不同的别名,然后它就像一个普通的连接:
SELECT
C1.category_title AS category_title,
C2.category_title AS subcategory_of
FROM categories C1
LEFT JOIN categories C2
ON C1.subcategory_id = C2.category_id
答案 1 :(得分:1)
据我所知,JOIN是加入两个表,而不是两列
考虑JOIN的更好方法是在列之间定义查询中的关系。
连接的列没有限制在不同的表中。唯一的问题是如何使用别名来引用它们,如前面的答案所述。即使在连接不同的表时,如果对表名使用别名,查询通常也更容易阅读。
当您需要连接具有相同列名的两个(或更多)表时,别名也很有用。