mysql文本值大小写错误

mysql文本值大小写错误,mysql,Mysql,我这里有个小问题。共有三个表格: 表1 category_id parent_id 1 0 2 1 3 0 4 0 5 10 表2 category_id Name 1 Cars 2 T

我这里有个小问题。共有三个表格:

表1

category_id        parent_id
     1                 0
     2                 1
     3                 0
     4                 0
     5                 10
表2

category_id         Name
     1              Cars
     2              Toys
     3              Gifts
     4              For women
     5              For men
表3

product_id       category_id
    1                 2
    1                 1
    2                 3
    2                 1
    3                 2
    4                 3
    4                 5
product_id列中的数字可以重复几次。我想加入这些表,并用一行获得每个产品的id,如下所示:

parent_id列中的数字指定了类别的类型和级别,可以是主类别,也可以是子类别。这是我的代码,但我在

    SELECT product_to_category.product_id, sum(CASE(category.parent_id) WHEN 1 
    THEN category_description.name ELSE 0 END) as category1,
    sum(CASE(category.parent_id) WHEN 2
    THEN category_description.name ELSE 0 END) as category2
from category LEFT JOIN category_description ON 
category_description.category_id = category.category_id 
LEFT JOIN product_to_category ON category.category_id = product_to_category.category_id
group by category.category_id
当我执行它时,我在category_主列上得到0个值

product_id          category1        category2
    1                   0                0
    2                   0                0
    3                   0                0
    4                   0                0
更改和检查

SELECT tab.product_id, 
       Sum(category_id1) AS Category_id1, 
       Sum(category_id2) AS Category_id2 
INTO   #temptable 
FROM  (SELECT a.product_id, 
          0 AS Category_id1, 
          Min(a.category_id) AS Category_id2 
   FROM   #table3 a 
          INNER JOIN (SELECT product_id, 
                             Count(category_id) AS Category_id 
                      FROM   #table3 
                      GROUP  BY product_id 
                      HAVING Count(category_id) > 1) b 
                  ON a.product_id = b.product_id 
   GROUP  BY a.product_id 
   UNION ALL 
   SELECT a.product_id, 
          Max(a.category_id) AS Category_id1, 
          0                  AS Category_id2 
   FROM   #table3 a 
          INNER JOIN (SELECT product_id, 
                             Count(category_id) AS Category_id 
                      FROM   #table3 
                      GROUP  BY product_id 
                      HAVING Count(category_id) > 1) b 
                  ON a.product_id = b.product_id 
   GROUP  BY a.product_id 
   UNION ALL 
   SELECT a.product_id, 
          a.category_id AS Category_id1, 
          0             AS Category_id2 
   FROM   #table3 a 
          INNER JOIN (SELECT product_id, 
                             Count(category_id) AS Category_id 
                      FROM   #table3 
                      GROUP  BY product_id 
                      HAVING Count(category_id) <= 1) b 
                  ON a.product_id = b.product_id) tab 
GROUP  BY tab.product_id 

SELECT #temptable.product_id, 
       CAT1.name AS Category_id1, 
       CAT2.name AS Category_id2 
FROM   #temptable 
       LEFT OUTER JOIN #table2 CAT1 
                    ON #temptable.category_id1 = CAT1.category_id 
       LEFT OUTER JOIN #table2 CAT2 
                ON #temptable.category_id2 = CAT2.category_id 

为什么不用计数和WHERE呢?你想数一数有多少category.parent_id等于1,对吗?因此:

SELECT category.category_id, COUNT(category_description.name)
category_main  FROM category 
LEFT JOIN category_description 
    ON category_description.category_id = category.category_id 
WHERE category.parent_id = 1 
GROUP BY category.category_id;

您是否需要在不同的列中列出每个类别

如果您不需要,请使用group_concat

将是这样的:

SELECT t3.product_id, GROUP_CONCAT(t2.name) FROM table3 t3
LEFT JOIN table2 t2 on t2.category_id = t3.category_id
LEFT JOIN table1 t1 on t1.parent_id = t2.category_id
GROUP BY t3.product_id

它说类别_main是未知列。这是因为它不是真正的列,但我希望它显示在结果集中。category_description.name在其表中有文本。按照这种方式,它在列中放入1s,但我希望文本值在那里。我已经编辑了我的问题,并提供了所需的结果集,因此您不需要应用任何聚合函数。检查我的答案否,我想您没有理解我的意思。我决定编辑这篇文章。请再次检查我的问题。另一次我不够清楚哦,好的,请看一下你想要的我的答案。它抛出了一个错误语法,在第7行使用“pivot maxvalue for cat1、cat2、cat3 piv中的category_id”,我已经编辑了我的问题并提供了所需的结果集。只是不知道我错在哪里了贝托,不,不,你没有理解我。我想让category_main拥有另一个表中的类别,其中它们等于1。我会编辑我的文章,你们会看到,我确实需要分类在不同的列中,正如我在示例中给出的那样。
SELECT category.category_id, COUNT(category_description.name)
category_main  FROM category 
LEFT JOIN category_description 
    ON category_description.category_id = category.category_id 
WHERE category.parent_id = 1 
GROUP BY category.category_id;
SELECT t3.product_id, GROUP_CONCAT(t2.name) FROM table3 t3
LEFT JOIN table2 t2 on t2.category_id = t3.category_id
LEFT JOIN table1 t1 on t1.parent_id = t2.category_id
GROUP BY t3.product_id