来自 table 的 Select 个字段满足另一个 table 中的条件

Select fields from a table which satisfy condition in another table

一个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

现在我想 select 表 1 中的那些元素对 (f1,f2),其中 f1f2 都在表 2 中的那些 f 中, 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)

结果和预期的一样

2   3
2   1

但是上面的查询中有重复,我认为可以通过

来消除
SELECT f1, f2 FROM table1
WHERE f1, f2 IN (SELECT f FROM table2 WHERE e=0)

但这给了我一个语法错误,并且

SELECT f1, f2 FROM table1
WHERE f1 AND f2 IN (SELECT f FROM table2 WHERE e=0)

什么都不给。

有没有办法做到不重复?

(我的动机是,这是从 python 程序访问的,其中限制查询的常量作为参数传递。使用我正在使用的代码,我必须使元组大两倍,后半部分等于第一部分,我想这会更容易出错,特别是当查询有点复杂时。它正在工作,但我想改进......我不包括任何python 代码因为我不认为它真的相关,但我也可以这样做。)

如果f1f2的组合在table1中是唯一的,可以join表,GROUP BY f1, f2并在[=15=中设置条件] 条款:

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