试图找到由两个其他键共享的表中的任何行(在同一个表中)

时间:2015-03-25 19:23:04

标签: sqlite

我正在寻找一些SQLite的帮助。我试图以尽可能简单的方式编写查询。也就是说,使用SQL语句而不是检索一组数据,然后通过迭代两者来设置和比较它们。

查看下表的摘录:我知道两个父ID,我想找到他们共同拥有的所有子ID。所以父母291& 673有755个共同点。他们可能有一个或多个孩子的共同点。

如何编写select语句来查找755?

提前感谢任何想法。 大卫

enter image description here

2 个答案:

答案 0 :(得分:0)

自联接可能是最有效的方法 -

SELECT DISTINCT(a.zchild)FROM a,b WHERE(a.zparent = 291 OR a.zparent = 293)AND(a.zchild = b.zchild AND a.zparent<> b.zparent)

答案 1 :(得分:0)

您可以为这些父母的每个孩子创建一个组,然后搜索同时拥有父母的组:

SELECT zChild
FROM zPcRel
WHERE zParent IN (291, 673)
GROUP BY zChild
HAVING COUNT(*) = 2

或者,使用compound query与父母双方的孩子们相交:

SELECT zChild FROM zPcRel WHERE zParent = 291
INTERSECT
SELECT zChild FROM zPcRel WHERE zParent = 673

您自己的查询也可以使用:

SELECT zChild
FROM zPcRel
WHERE zChild IN (SELECT zChild
                 FROM zPcRel
                 WHERE zParent = 673)
  AND zParent = 291

哪些查询最有效取决于数据的形状以及有哪些索引;你必须衡量。