0

次のテーブルがあります。

   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          |
+-------------------------------+

製品に関連するすべてのカテゴリを返すクエリを実行したいと考えています。

1例: I want to get the result as result grandson,dad,granny (この製品が関連するカテゴリの名前) の製品 ID を指定した場合

これは私の試みです:

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

私はここでいくつかの助けを得たいと思います:)

前もって感謝します!

4

2 に答える 2

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)
于 2013-08-13T20:14:16.423 に答える
-1

ええと、私は実際にはあまりにも一生懸命やっていることに気づきました。

将来いつかそれに遭遇する人のために、ここに解決策があります:

SELECT `categories`.`name`
FROM `categories` 
JOIN `products2categories`
ON `categories`.`id` = `products2categories`.`category_id`
WHERE `products2categories`.`product_id` = 1
于 2013-08-13T20:26:38.007 に答える