【问题标题】:many-to-many relationship,, querying one side depending on its elements多对多关系,根据元素查询一侧
【发布时间】:2012-05-10 04:48:06
【问题描述】:

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

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(因为此 TEST 仅在 SESSION 1 中,但它不是唯一的)。

(对不起标题,我真的不知道怎么用几句话说清楚!)。

【问题讨论】:

    标签: sql sqlite


    【解决方案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);
    

    RETURN EXISTS 语法可能只是 TSQL,但您明白了。如果查询返回行,则返回true,否则返回false。

    【讨论】:

    • 谢谢,它有效。我最终得到的是:select te.*, case when exists(select SESSION_ID from SESSION_TEST where TEST_ID = te.ID and ORDINAL = 1 and SESSION_ID NOT IN (select distinct SESSION_ID from SESSION_TEST where ORDINAL > 1)) 然后 1 else 0 end HAS_PAUSED from TEST te;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 2019-02-02
    • 2014-07-14
    • 2015-03-31
    • 2014-04-08
    相关资源
    最近更新 更多