假设我有下表,名为data
:
ID foo1 foo2 foo3
1 11 22 33
2 22 17 92
3 31 33 53
4 53 22 11
5 43 23 9
我想选择第一行中任何一个foo1
或foo2
匹配foo3
这些列中的任何一个的所有行。也就是说,我想要至少一个foo
s 也出现在第一行的所有行。在上面的示例中,我想选择第 1、2、3 和 4 行。我认为我可以使用类似
SELECT * FROM data WHERE foo1 IN (SELECT foo1,foo2,foo3 FROM data WHERE ID=1)
OR foo2 IN (SELECT foo1,foo2,foo3 FROM data WHERE ID=1)
OR foo3 IN (SELECT foo1,foo2,foo3 FROM data WHERE ID=1)
但这似乎不起作用。我当然可以使用
WHERE foo1=(SELECT foo1 FROM data WHERE ID=1)
OR foo1=(SELECT foo2 FROM data WHERE ID=1)
OR ...
但这会涉及很多行,而在我的真实数据集中实际上有 16 列,所以下背部真的很痛苦。有没有更复杂的方法来做到这一点?
另外,如果我还想计算命中数(在上面的示例中,第 1 行获得 4,第 4 行获得 2,第 2,3 行获得 1),我该怎么办?