という名前の次のテーブルがあるとします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
つまり、少なくとも 1 つの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 となります)。