Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 多对多关系,,根据其元素查询一侧_Sql_Sqlite - Fatal编程技术网

Sql 多对多关系,,根据其元素查询一侧

Sql 多对多关系,,根据其元素查询一侧,sql,sqlite,Sql,Sqlite,以下是我的数据库架构中最相关的部分: 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

以下是我的数据库架构中最相关的部分:

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)
);
存在由多个测试组成的会话。会话中的测试具有顺序。会话测试是多对多关系的链接表:一个测试可以是多个会话的一部分,一个会话由多个测试组成,但一个测试只能在一个会话中进行一次,这就是PK

我在编写返回true或1的SQL语句时遇到了问题,因为我使用SQLite进行具有给定ID的测试,如果有一个会话具有该测试,并且只有该测试,换句话说,该会话只包含一个测试,即我正在寻找的测试。 例如:

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的会话有两个测试,会话2和会话3各有一个测试。我需要一个select,它将为输入1和3返回1/true,但为2返回0,因为此测试仅在会话1中进行,但它不是唯一的测试

很抱歉这个标题,我真的不知道如何用几句话把它说清楚

RETURN EXISTS SELECT SESSION_ID FROM 
SESSION_TEST
WHERE TEST_ID = @id
AND ORDINAL = 1
AND SESSION_ID NOT IN (SELECT SESSION_ID FROM SESSION_TEST WHERE ORDINAL > 1);

returnexists语法可能仅为TSQL,但您可以理解。如果查询返回行,则返回true,如果不返回false。

谢谢,它可以工作。我实际得到的结果是:选择te.*,当退出时从会话测试中选择会话ID,其中测试ID=te.ID,序号=1,会话ID不在会话测试中,从会话测试中选择不同的会话ID,其中序号>1,然后1,否则0结束已从测试te暂停;