从没有唯一键的两个表加入数据

时间:2013-11-10 11:00:07

标签: sql database join

我在一个数据库(访问文件)中有两个表。

表1

| Product Id |  Year     | Sales |
----------------------------------
| 1144       |  2013     | 100   |
| 20131120   |  2013     | 200   |
| 1144       |  2012     | 333   |

表2

| Product Id     |  Category     |
----------------------------------
| 1144           | Car           |
| 20131120       | Motorbike     |

第一个表(表1)是用户可以随时添加新数据的表,第二个表在新产品ID出现时偶尔更新一次。我想加入这个表,在Product Id的基础上建立某种关系,但由于缺少唯一的主键,我无法使用关系,我是对的吗?当我执行SQL查询(SELECT * FROM Table 1)时,我希望得到如下结果:

| Product Id |  Year     | Sales | Category   |
-----------------------------------------------
| 1144       |  2013     | 100   | Car        |
| 20131120   |  2013     | 200   | Motrobike  |
| 1144       |  2012     | 333   | Car        |

我知道我可以加入这两个表,但我不希望每次用户向表1添加新数据时都这样做。你知道任何解决方案我该怎么办?

1 个答案:

答案 0 :(得分:3)

  

由于缺乏独特的质量密钥,我无法使用关系,   我是对的吗?

不,这不对,你通常可以JOIN这两个表。对于具有所谓合格数据类型的任何列,JOIN两个表或结果集也是合法的。

SELECT
  t1.ProductId, t1.year, t1.sales, t2.category
FROM table1 AS t1
INNER JOIN table2 AS t2 ON t1.productId = t2.productId;

  

但我不希望每次用户添加新数据时都这样做   表1

您在第二个表格中不需要ProductId,而是需要CategoryId,并在第一个表格中添加新列CategoryId并将其声明为外国键。你的表应该是这样的:

Table1 (产品):

  • ProductId
  • CategoryId
  • Year
  • Sales

Table2 (类别):

  • CategoryId
  • CategoryName

然后将类别添加到类别表table2一次,并将产品添加到产品表table1一次。并为每个产品输入CategoryId。这就是所谓的normalization

您还应该将table1中的ProductId和table2中的CategoryID定义为主键,将第一个表中的CategoryID定义为外键。