这是我的数据库架构中最相关的部分:
create table TEST (
ID integer not null,
NAME text not null,
constraint PK_TEST primary key (ID),
constraint UNQ_TEST_NAME unique (NAME)
);
create table SESSION (
ID integer not null,
constraint PK_SESSION primary key (ID)
);
create table SESSION_TEST (
SESSION_ID integer not null,
TEST_ID integer not null,
ORDINAL integer not null,
constraint PK_SESSION_TEST primary key (SESSION_ID, TEST_ID),
constraint FK_SESSION_TEST_SESSION_ID foreign key (SESSION_ID) references SESSION (ID) on delete cascade,
constraint FK_SESSION_TEST_TEST_ID foreign key (TEST_ID) references TEST (ID) on delete cascade,
constraint UNQ_SESSION_TEST_SESSION_ID_ORDINAL unique (SESSION_ID, ORDINAL)
);
有由多个测试组成的会话。SESSIONS 中的 TEST 具有序数(按顺序排列)。SESSION_TEST 是多对多关系的链接表:一个测试可以是多个会话的一部分,一个会话由多个测试组成(但一个测试只能在一个会话中出现一次,即PK)。
如果有一个会话具有该测试并且只有该测试(换句话说,会话仅包含一项测试,即我正在寻找的测试)。例如:
TEST:
ID|NAME
1|aaa
2|bbb
3|ccc
SESSION:
ID
1
2
3
4
SESSION_TEST:
SESSION_ID|TEST_ID|ORDINAL
1|1|1
1|2|2
2|1|1
3|3|1
ID = 1 的 SESSION 有两个 TEST,SESSION 2 和 3 各有一个测试。我需要有一个选择,它将为输入 1 和 3 返回 1/true,但为 2 返回 0(因为此测试仅在会话 1 中,但它不是唯一的)。
(对不起标题,我真的不知道怎么用几句话把它说清楚!)。