mysql - 如何从 2 列表转换多对多关系?

标签 mysql sql many-to-many pivot-table

假设我有一个数据库表(下面的一些示例代码),它存储两个列表(在我的例子中是需求和测试用例)之间的关系,并且我想创建一个表,其中行显示测试用例,列显示需求,并有一个指示符显示存在关系。

一些限制

  • 我没有能力更改数据库结构,因为它属于开源测试用例管理系统 (TestLink)。
  • 可以为此编写一些代码,但我希望可以在 MySQL 中完成。
  • 啊,是的,它使用 MySQL,所以这必须在该环境中工作。
  • 此功能曾经存在,但已被删除,因为通常情况下,当存在数以万计的测试用例和需求时,此类工作会使数据库崩溃。

    创建表数据透视 ( req_id int(11), testcase_id int(11) );

    /*表的数据pivot */

    插入pivot(req_id,testcase_id)值(1,1);

    插入pivot(req_id,testcase_id)值(2,2);

    插入pivot(req_id,testcase_id)值(3,3);

    插入pivot(req_id,testcase_id)值(4,1);

    插入pivot(req_id,testcase_id)值(5,2);

    插入pivot(req_id,testcase_id)值(6,3);

    插入pivot(req_id,testcase_id)值(2,1);

    插入pivot(req_id,testcase_id)值(3,2);

我想从查询中得到一个看起来像这样的表:

   1    2    3    4    5    6
1  x    x         x
2       x    x         x
3            x              x

注意:行是 testcase_ids,列是“req_ids”

有人知道如何仅使用 SQL 来实现此目的吗?

最佳答案

下面的方法效率更高:

为 test_cases 创建一张表,例如

create table testCases(
id int(11) auto_increment,
testcase varchar(200),
primary key(id))

一张表满足要求

requirements(
id int(11) auto_increment,
requirements varchar(200),
primary key(id))

然后在第三个表中映射关系

 create table matchRequirementsToTests(
 requirements varchar(200),
 testcase varchar(200),
primary key(requirements, testcase),
foreign key (requirements) references Requirements(id),
foreign key(test case) references Test_cases(id))

关于mysql - 如何从 2 列表转换多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9640926/

相关文章:

c# - where 语句在 C# 中无法正常工作

php - Json_Encode php 最后一个逗号

php - 如何使用多个连接从不同的表中选择总和和计数

sql - UPDATE使用两个表,并置

java - 使用 Java 的 Google App Engine 中的多对多关系

php - 基于多对多表调用一张表的信息

jpa - 与 Play Framework 1.2.5 JPA 的多对多关系

python - (2002, "Can' t 通过套接字 '/var/run/mysqld/mysqld.sock' (2) 连接到本地 MySQL 服务器”)

mysql - 从多个表中查询数据

mysql - 卡住!如何连接三个 SQL 表来回答这两个问题?或者我不需要?