【发布时间】:2012-03-09 20:59:59
【问题描述】:
假设我有一个存储两个列表之间关系的数据库表(下面的一些示例代码)(在我的例子中是需求和测试用例),并且我想创建一个表,其中的行显示测试用例,列显示需求,指示器显示存在关系。
一些限制
- 我没有更改数据库结构的奢侈,因为它属于开源测试用例管理系统 (TestLink)。
- 可以为此编写一些代码,但我希望可以在 MySQL 中完成。
- 啊,是的,它使用 MySQL,所以它必须在那个环境中工作。
-
此功能曾经存在,但已被取消,因为通常情况下,当有数以万计的测试用例和需求时,这种类型的工作会使数据库陷入困境。
创建表
pivot(req_idint(11),testcase_idint(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 来获得此信息?
【问题讨论】:
-
您正在尝试生成关系模型的报告,这不是您应该在 SQL 中执行的操作。 SQL 是用于可靠存储和返回结构化数据的引擎,而不是用于格式化数据的引擎。报告工具甚至电子表格都可以轻松地为您转换这些数据。
-
如果您有一组已知的 testcase_id,那么您可以编写一系列乏味的左连接来获得结果。如果您不知道,那么您可以生成一系列左连接作为动态查询,然后将它们放在前面提到的繁琐查询中。无论哪种方式,这都很乏味和不愉快。
-
测试用例会随着时间的推移而增长(需求列表也会增长),因此实现这一目标的通用方式将是首选方式。
-
感谢大家的参与:)
标签: mysql sql many-to-many pivot-table