我有以下模式:选择自己的数组。 PostgreSQL的9.5
create table reports (id bigserial primary key);
create table scens (id bigserial primary key,report_id bigint references reports(id), path_id bigint);
create table runs (id bigserial primary key,scen_id bigint references scens(id));
create table fails (
id bigserial primary key,
run_id bigint references runs(id),
type varchar not null
);
create table errors (
id bigserial primary key,
run_id bigint references runs(id),
type varchar not null
);
INSERT INTO reports(id)
VALUES (1);
INSERT INTO reports(id)
VALUES (2);
INSERT INTO scens(id, report_id)
VALUES (555, 1);
INSERT INTO scens(id, report_id)
VALUES (666, 2);
INSERT INTO runs(id, scen_id)
VALUES (1, 555);
INSERT INTO runs(id, scen_id)
VALUES (2, 666);
INSERT INTO runs(id, scen_id)
VALUES (3, 666);
INSERT INTO runs(id, scen_id)
VALUES (4, 666);
INSERT INTO errors(id, run_id, type)
VALUES (DEFAULT, 2, 'ERROR2 TYPE');
INSERT INTO errors(id, run_id, type)
VALUES (DEFAULT, 3, 'ERROR2 TYPE');
INSERT INTO fails(id, run_id, type)
VALUES (DEFAULT, 1, 'Attachment Journal Mismatch');
INSERT INTO fails(id, run_id, type)
VALUES (DEFAULT, 2, 'Appeared new difficulty');
INSERT INTO fails(id, run_id, type)
VALUES (DEFAULT, 2, 'Parameters Mismatch');
INSERT INTO fails(id, run_id, type)
VALUES (DEFAULT, 3, 'Attachment Journal Mismatch');
INSERT INTO fails(id, run_id, type)
VALUES (DEFAULT, 3, 'Appeared new difficulty');
INSERT INTO fails(id, run_id, type)
VALUES (DEFAULT, 3, 'Parameters Mismatch');
我需要找到一个运行(实际上更多的跑步),其中有错误ERROR2 TYPE和失败“出现了新的困难”和“参数不匹配”。
正确
1 -> 'ERROR2 TYPE'
1 -> 'Appeared new difficulty'
1 -> 'Parameters Mismatch'
错误
2 -> 'Parameters Mismatch'
2 -> 'Appeared new difficulty'
因此,请求应该找哪里都要求运行失败和错误属于特定运行:
的1
运行不适合我因为它没有'参数不匹配'并且没有错误ERROR2 TYPE。 2
运行适合我,因为它具有所有错误(ERROR2 TYPE)并且全部失败('显示新的难度'和'参数不匹配')。 3
运行适合我,因为它具有所有错误(ERROR2 TYPE)并且全部失败('显示新的难度'和'参数不匹配')。如果运行失败(它有新的失败:'Attachment Journal Mismatch'),那么运行就没有问题,但它至少要求失败和错误。
我该怎么办?
下列SQL完全不工作(它觉得没有什么):
select scens.id as scen_id,
scens.path_id, fails.type, reports.id, runs.id
from reports
inner join scens on reports.id=scens.report_id
inner join runs on runs.scen_id=scens.id
inner join fails on fails.runs_id=runs.id
where reports.id=2 and fails.type=''Parameters Mismatch'
and fails.type='Appeared new difficulty'
此代码soens;吨工作过,只能搜索1的比赛,但不是一整套(“出现了新的困难','Parameters Mismatch'):
select scens.custom_id as scen_custom_id, scens.id as scen_id,
scens.path_id, scens.category, fails_map.type, f.error_type
from reports
inner join scens on reports.id=scens.report_id
inner join runs on runs.scen_id=scens.id
inner join fails on fails.runs_id=runs.id
INNER JOIN
unnest(array['Appeared new difficulty', 'Parameters Mismatch']) f (error_type)
on fails.type=f.error_type
where reports.id=2
似乎我需要某种交集。