【问题标题】:SQLite: Using other tables to exclude results from self-joinSQLite:使用其他表从自联接中排除结果
【发布时间】:2014-01-08 02:20:01
【问题描述】:

我试图在我的“故事”表中查找所有两条记录集,这样两条记录不会连接到“角色”中某种类型的任何相同记录(通过“参与者”,桥实体)。这是我写的查询:

SELECT str1._id, str2._id
FROM story AS str1, story AS str2
WHERE str1._id < str2._id
AND (SELECT COUNT(chr_id) FROM
    (SELECT chr_id
    FROM participant
    WHERE isparent = 0
    AND str_id = str1._id
    INTERSECT
    SELECT chr_id
    FROM participant
    WHERE isparent = 0
    AND str_id = str2._id)) = 0;

最里面的查询和围绕它的计数查询在单独使用 str1._id 和 str2._id 替换为实际值时按预期运行,但整个查询一起似乎为最终条件产生 TRUE不应该的情况。这让我怀疑这个问题与别名有关,但我不确定要更改什么来解决这个问题。

编辑:这是我用来测试的参与者表中的示例数据

str_id  chr_id  isparent
     1       1         1
     1       2         1
     1       3         0
     2       1         1
     2       3         0
     3       4         1
     3       3         1
     3       5         0
     3       6         0
     3       7         0

这是查询给出的输出

_id  _id
  1    2
  1    3
  2    3

这是我期望的输出

_id  _id
  1    3
  2    3

【问题讨论】:

  • 您没有显示story 表,而是显示了包含1,2,3 的表,此查询对我有效。

标签: sql sqlite subquery self-join


【解决方案1】:

我已经稍微简化了查询,现在它已经完成了它的原意。这是新的查询:

SELECT str1._id, str2._id
FROM story AS str1, story AS str2
WHERE str1._id < str2._id
AND (SELECT chr_id
    FROM participant
    WHERE isparent = 0
    AND str_id = str1._id
    INTERSECT
    SELECT chr_id
    FROM participant
    WHERE isparent = 0
    AND str_id = str2._id) IS NULL;

然而,为什么原来的查询不起作用。

【讨论】:

    猜你喜欢
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2020-05-30
    相关资源
    最近更新 更多