1

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

表 1

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

表 2

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

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

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

我知道我可以加入这两个表,但我不想每次用户将新数据添加到表 1 时都这样做。你知道我该怎么做吗?

4

1 回答 1

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第二个表中不需要 a ,而是需要 a CategoryId,并在第一个表中添加一个新列CategoryId并将其声明为外键。您的表格应如下所示:

Table1(产品):

  • ProductId,
  • CategoryId,
  • Year,
  • Sales.

Table2(类别):

  • CategoryId,
  • CategoryName.

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

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

于 2013-11-10T11:03:29.423 回答