【问题标题】:Join data from two tables without unique key连接两个没有唯一键的表中的数据
【发布时间】:2013-11-10 11:00:07
【问题描述】:

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

表 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 添加新数据时都这样做。你知道我该怎么做吗?

【问题讨论】:

    标签: sql database join


    【解决方案1】:

    由于缺少唯一的主键,我无法使用关系, 我说的对吗?

    不,这不对,你可以正常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;
    

    但我不想每次用户添加新数据时都这样做 表一

    第二个表中不需要ProductId,而是需要CategoryId,并在第一个表中添加一个新列CategoryId,并将其声明为外键。您的表格应如下所示:

    Table1(产品):

    • ProductId,
    • CategoryId,
    • Year,
    • Sales。

    Table2(类别):

    • CategoryId,
    • CategoryName。

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

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

    【讨论】:

    • 非常感谢。我在此字段的基础上创建了关系。现在我想对表 1 和 ProductId、Year、Sales 执行 SELECT 查询,我还想查看 CategoryName。我想这很容易,但我无法做到。你能帮帮我吗?
    • @user2674174 - 随时欢迎您 :) 我在答案中发布的查询应该满足您的要求,它也会像 SELECT t1.ProductId, t1.year, t1.sales, t2.category FROM table1 AS t1 INNER JOIN table2 AS t2 ON t1.productId = t2.productId; 一样选择类别名称。你试过了吗?
    • 好的,谢谢。我认为当我创建表之间的关系时它会更自动地工作,我只能对表 1 进行操作并从表 2 中获取信息。我可以使用 INNER JOIN 语句而不定义关系。
    猜你喜欢
    • 2019-06-24
    • 2014-08-04
    • 2019-11-16
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 2021-03-08
    • 2017-01-25
    • 1970-01-01
    相关资源
    最近更新 更多