SQL Server:规范化数据库中的重复行

问题描述 投票:-1回答:2

我是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
sql-server
2个回答
0
投票

请提供表架构来解决您的问题。


0
投票

您没有提到哪个表导致一对多关系。注意,这将解决所有问题,每个代码仅具有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
© www.soinside.com 2019 - 2024. All rights reserved.