假设我有一个数据库表(下面的一些示例代码),它存储两个列表(在我的例子中是需求和测试用例)之间的关系,并且我想创建一个表,其中行显示测试用例,列显示需求,并有一个指示符显示存在关系。
一些限制
- 我没有能力更改数据库结构,因为它属于开源测试用例管理系统 (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/