gpt4 book ai didi

sqlite - 连接不在组中的元素

转载 作者:行者123 更新时间:2023-12-02 11:54:08 25 4
gpt4 key购买 nike

我有一个布局不受我控制的数据库,其中包含两个实体:“Person”和“Trait”。每个人可能具有多种特征,并且每个特征可能与多个人相关联。这种关系有一个中间实体:

Person <->> Person_Trait <<-> Trait

到目前为止一切顺利。我想创建一个包含所有特征的列表,其中包括具有给定特征的人以及具有相同特征的人。积极的一面很简单:

SELECT t.id,
t.name,
positives.count,
positives.members
FROM Trait t
JOIN (
SELECT t.id,
count() AS count,
group_concat(p.name) AS members
FROM Person p
JOIN Person_Trait pt ON pt.id_person = p.Id
JOIN Trait t ON t.id = p.id_trait
GROUP BY t.id
)
AS positives ON t.id = positives.id;

但是,我对如何获得负面群体感到困惑,这样我就可以加入反对它的行列。有什么想法吗?

如果这些可能有帮助,我可以提出意见。

最佳答案

一种方法是通过以下方式找到负组:

  1. 从人员和特征(人员和特征的所有可能组合)中获取 p.id 和 t.id 的叉积
  2. 从叉积中减去正集

剩下的是所有负数 p.id/t.id 对的集合

然后您可以执行类似于您所拥有的查询。

因此,获取完整底片集的查询将是:

SELECT p.id AS p_id, t.id AS t_id
FROM person p, trait t
EXCEPT
SELECT pt.id_person, pt.id_trait
FROM person_trait pt

然后您可以将其作为连接到其他表的子查询滑入,以获取名称:

SELECT q1.t_id, t.name, COUNT() AS negcount, GROUP_CONCAT(p.name) AS negmem
FROM
(SELECT p.id AS p_id, t.id AS t_id
FROM person p, trait t
EXCEPT
SELECT pt.id_person, pt.id_trait
FROM person_trait pt) q1
JOIN trait t ON t.id = q1.t_id
JOIN person p ON p.id = q1.p_id
GROUP BY t_id

这对我来说适用于试验数据。然后,您可以设置将此查询与现有的肯定查询相结合。

关于sqlite - 连接不在组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35214559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com