我有一个格式如下的表格:
row_key extID tag val
------- ----- --- ---
1 1 A a
2 1 A b
3 1 B c
4 2 A d
5 2 C e
现在我想要所有的 extID,其中有几对具有特定值的 (tag, val),例如:
(tag, val) = (A,a) AND (tag, val) = (B,c)
或者,
(tag, val) = (C,e)
约束的数量可以改变。
我可以想到几种方法来做到这一点:
- 对每个约束执行自联接
- 在调用程序中进行搜索(迭代)(多个 SQL 查询)
- (也许?)编写一个 SQL 函数来执行此操作
- 嵌套的 SELECT 子句(将“extID”传递到外部级别并使用
WHERE extID IN (SELECT extID FROM ...)
- 我找不到的唯一真正的解决方案。
哪一种是首选(最快和最优雅)的方法?(当然,“当然,5. 是正确答案除外。”)
我认为多重 SELF-join 非常优雅。但是,我不知道它是否快速且相对内存效率高。
此外,我想使用一种无需适应即可与 MySQL、PostgreSQL 和 SQLite 一起使用的方式——这就是我不能使用 PIVOT afaiu 的原因。