假设我有这个数据库表(下面的一些示例代码),它存储了两个列表(在我的情况下是需求和测试用例)之间的关系,我想创建一个表,其中行显示测试用例和列,显示需求,指示器显示存在关系。
一些限制
此功能过去存在,但已被删除,因为通常情况下,当有数万个测试用例和要求时,这种类型的工作会使数据库陷入困境。
创建表pivot
(
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获取此功能的提示?
答案 0 :(得分:1)
效率更高:
为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))
答案 1 :(得分:1)
select testcase_id,
if(sum(req_id = 1), 'X', '') as '1',
if(sum(req_id = 2), 'X', '') as '2',
if(sum(req_id = 3), 'X', '') as '3',
if(sum(req_id = 4), 'X', '') as '4',
if(sum(req_id = 5), 'X', '') as '5',
if(sum(req_id = 6), 'X', '') as '6'
from pivot
group by testcase_id;
这很难看,但确实有效:
+-------------+---+---+---+---+---+---+
| testcase_id | 1 | 2 | 3 | 4 | 5 | 6 |
+-------------+---+---+---+---+---+---+
| 1 | X | X | | X | | |
| 2 | | X | X | | X | |
| 3 | | | X | | | X |
+-------------+---+---+---+---+---+---+
3 rows in set (0.00 sec)