Sqlite 连接不在组中的元素
我有一个数据库,它的布局超出了我的控制,它包含两个实体,“Person”和“Trait”。每个人可能有多个特征,每个特征可能与多个人相关。此关系有一个中间实体: 到目前为止还不错。我想创建一个包含所有特征的列表,有特定特征的人和没有相同特征的人。积极因素很简单:Sqlite 连接不在组中的元素,sqlite,Sqlite,我有一个数据库,它的布局超出了我的控制,它包含两个实体,“Person”和“Trait”。每个人可能有多个特征,每个特征可能与多个人相关。此关系有一个中间实体: 到目前为止还不错。我想创建一个包含所有特征的列表,有特定特征的人和没有相同特征的人。积极因素很简单: SELECT t.id, t.name, positives.count, positives.members FROM Trait t JOIN ( SELECT t.id,
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;
然而,如何让消极的群体加入到我的队伍中来反对它,我却被难住了。有什么想法吗
如果有帮助的话,我可以发表意见。一种方法是通过以下方式找到负面群体:
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
这对我来说适用于试验数据。然后,您可以设置将此查询与现有的正向查询相结合。这非常有效,非常感谢。事实上,这比我预期的要明显得多,但我没有意识到。