mysql - 建立 N-M 关系的问题

标签 mysql sql database

使用 MySQL 我试图使用已上传到数据库的数据建立一对多关系。举例来说,假设我在一个表中有一个姓名列表,我想将它们连接到他们去过的地方的列表。显然,1 个人可以去很多不同的地方,但我在进行此设置时遇到了问题。

        -----Name-----------ID---------
             John Smith     1
             Joe Random     2
             Seth Guy       3
        ------------------------------

我有另一个表格,如下所示:

        -------city---------ID---------
            New York        1
            Chicago         2 
            Orlando         3
            LA              4
        -------------------------------

我正在寻找这样的东西:

        --------Name--------City----------
             John Smith    Chicago
             John Smith    Orlando
             John Smith    New York
             Seth Guy      Chicago
             Joe Random    LA
      ------------------------------------

我显然知道约翰·史密斯去过所有 3 个地点,因为我上传的原始文件告诉我这一点,但我希望数据库建立该连接并相应地对他进行定位。

最佳答案

正如评论中所指出的,这是一个 N-M 关系,而不是 1-N 关系。您需要一个额外的“映射”表来记录访问:

CREATE TABLE visits (
    person_id INT,
    city_id INT,
    CONSTRAINT visits_pk PRIMARY KEY (person_id, city_id)
);

然后,您可以通过几个连接查询所有访问:

SELECT person.name, city.name
FROM   person
JOIN   visits ON person.id = visits.person_id
JOIN   city ON visits.city_id = city.id

关于mysql - 建立 N-M 关系的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26613257/

相关文章:

php - PHP while循环中MYSQL更新和删除查询

sql - 添加一个表示其他两个Varchar列的串联的列

php - Wordpress 数据库连接错误

mysql - 如何在 MySQL/SQL 中存储有关谁评价和推荐歌曲或项目的数据

Mysql搜索匹配和排序

mysql - 如何在 SQL 中完成以下操作?

mysql - 是否可以组合 'DISTINCT' 和 'COUNT' 查询,以便我可以看到每个不同值出现的次数?

android - 删除 Realm 数据库对象,但即使所有对象都为空, Realm 文件大小保持不变。随着时间的推移变得太大了

database - 驼色和散装插入物

sql - 如何解决 SQL Server 查询错误 : "Divide by zero error encountered."