我有以下表格:
Products:
+---------------------------+
|id|name |details |price|cn|
|__|_____|_________|_____|__|
| 1|pen |somethi |100 |10|
| 2|paper|something|30 |11|
+---------------------------+
Categories:
+----------------------------+
|id | name |parent_id |
|____________________________|
|1 | granny | 0 |
|2 | dad | 1 |
|3 | grandson | 2 |
|4 | grandson 2| 2 |
+----------------------------+
Products2categories:
+-------------------------------+
| id | product_id | category_id|
|_______________________________|
| 1 | 1 | 3 |
| 2 | 1 | 2 |
| 3 | 1 | 1 |
+-------------------------------+
我想做一个返回某些产品相关的所有类别的查询。
例如:
当我提供产品ID 1
时,我希望得到结果
孙子,爸爸,奶奶(该产品所属类别的名称)
这是我的尝试:
SELECT `categories`.`name`
FROM `categories`
JOIN (
SELECT `products2categories`.`category_id`,`products2categories`.`product_id`
FROM `products2categories` a
JOIN `products`
ON `products`.`id` = `products2categories`.`product_id`
)
ON `categories`.`id` = `products2categories`.`category_id`
我遇到以下错误:
Every derived table must have its own alias
我想在这里得到一些帮助:)
提前致谢!
答案 0 :(得分:0)
除非我误解你的陈述,否则我相信你的事情过于复杂。根据您对所需内容的口头描述(并忽略您的代码),这将满足您的要求:
SELECT name FROM categories WHERE id IN (SELECT id FROM products2categories WHERE product_id = 1);
编辑:这是完整的测试
CREATE TABLE `categories` (
`id` int(11) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`parent_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `categories` VALUES (1,'granny',0),(2,'dad',1),(3,'grandson',2),(4,'grandson 2',2);
CREATE TABLE `products` (
`id` int(11) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`details` varchar(255) DEFAULT NULL,
`price` int(11) DEFAULT NULL,
`cn` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `products` VALUES (1,'pen','somethi',100,10),(2,'paper','something',30,11);
CREATE TABLE `products2categories` (
`id` int(11) DEFAULT NULL,
`product_id` int(11) DEFAULT NULL,
`category_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `products2categories` VALUES (1,1,3),(2,1,2),(3,1,1);
mysql> SELECT name FROM categories WHERE id IN (SELECT id FROM products2categories WHERE product_id = 1);
+----------+
| name |
+----------+
| granny |
| dad |
| grandson |
+----------+
3 rows in set (0.00 sec)
答案 1 :(得分:-1)
好吧,我刚刚发现我实际上做得太难了。
对于将来会遇到的人,以后就是解决方案:
SELECT `categories`.`name`
FROM `categories`
JOIN `products2categories`
ON `categories`.`id` = `products2categories`.`category_id`
WHERE `products2categories`.`product_id` = 1