我是SQL的新手,我一直在研究规范化数据库(3 nf)。当我尝试使用连接显示行时,由于某些表是一对多关系,所以我得到了笛卡尔积的重复行。如您所见,Product_Name不断重复。任何建议或帮助,将不胜感激!
+----------------------------------------------------------+----------------------------------------------+
| Product_Name | Category |
+----------------------------------------------------------+----------------------------------------------+
| Dynamo Power Gel Laundry Detergent Refill-Anti-bacterial | Household |
| UIC Big Value Liquid Detergent Refill - Anti- Bacterial | Household |
| Lindt Execellence Chocolate Bar-90%(Dark) | Foodcupboard |
| Lindt Execellence Chocolate Bar-90%(Dark) | Foodcupboard |
| Lindt Execellence Chocolate Bar-70%(Dark) | Foodcupboard |
| Lindt Execellence Chocolate Bar-70%(Dark) | Foodcupboard |
| Minute Maid Pulpy Bottle Juice Drink - Orange | Drinks |
| Lindt Execellence Chocolate Bar-70%(Dark) | Foodcupboard |
| Lindt Execellence Chocolate Bar-70%(Dark) | Foodcupboard |
+----------------------------------------------------------+----------------------------------------------+
这是我使用的SQL语句:
select
N.Product_Name, C.Category
from
Product_Table P
join
Product_Name_Table N on P.Name_Code = N.Name_Code
join
category_table C on P.Product_Code = C.Product_Code
请提供表架构来解决您的问题。
您没有提到哪个表导致一对多关系。注意,这将解决所有问题,每个代码仅具有1个文本值(Product_Name和Category)。使用子查询来确保不同的值。您可以通过一次删除一个DISTINCT来解决这个问题,以确定哪个问题,直到您再次看到重复项。然后,我建议删除不会导致重复的表的子查询。
SELECT N.Product_Name, C.Category
FROM ( SELECT DISTINCT Product_Code, Name_Code FROM Product_Table ) P
JOIN ( SELECT DISTINCT Name_Code, Product_Name FROM Product_Name_Table ) N on P.Name_Code = N.Name_Code
JOIN ( SELECT DISTINCT Product_Code, Category FROM category_table ) C on P.Product_Code = C.Product_Code