mysql文本值大小写错误
我这里有个小问题。共有三个表格: 表1mysql文本值大小写错误,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
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