如何解决从表中选择满足另一个表中条件的字段
一个 sqlite 数据库有以下两个表:
table1 table2
--------- ---------
f1 | f2 e | f
--------- ---------
0 | 1 0 | 1
2 | 3 0 | 2
1 | 4 0 | 3
2 | 1 1 | 4
0 | 2 1 | 0
3 | 0 1 | 3
现在我想从 table1 中选择那些元素对 (f1,f2)
,其中 f1
和 f2
都在 table2 中的那些 f
中,{{1} }.
这可以通过
来实现e=0
结果,如预期
SELECT f1,f2 FROM table1
WHERE f1 IN (SELECT f FROM table2 WHERE e=0)
AND f2 IN (SELECT f FROM table2 WHERE e=0)
但是上面的查询有重复,我认为可以通过 make 来消除
2 3
2 1
但这给了我一个语法错误,并且
SELECT f1,f2 FROM table1
WHERE f1,f2 IN (SELECT f FROM table2 WHERE e=0)
什么都不给。
有没有不重复的方法?
(我的动机是要从 python 程序访问它,其中约束查询的常量作为参数传递。使用我正在使用的代码,我必须使元组大两倍,后半部分等于第一个,我想这会更容易出错,特别是当查询有点复杂时。它正在工作,但我想改进......我不包括任何 python 代码,因为我不认为这并不重要,但我也可以这样做。)
解决方法
如果f1
、f2
的组合在table1
中是唯一的,可以加入表GROUP BY f1,f2
并在HAVING
子句中设置条件:
SELECT t1.f1,t1.f2
FROM table1 t1 INNER JOIN table2 t2
ON t2.f IN (t1.f1,t1.f2)
WHERE t2.e = 0
GROUP BY t1.f1,t1.f2
HAVING COUNT(*) = 2
参见demo。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。