我有一个非常窄的表:user_id,ancestry。
user_id 列是不言自明的。
祖先列包含用户祖先的国家/地区。
一个用户可以在表上拥有多行,因为一个用户可以拥有来自多个国家/地区的祖先。
我的问题是:如何选择祖先来自多个指定国家/地区的用户?
例如,显示祖先来自英国、法国和德国的所有用户,并为每个满足该条件的用户返回 1 行。
那条 SQL 是什么?
user_id ancestry
--------- ----------
1 England
1 Ireland
2 France
3 Germany
3 Poland
4 England
4 France
4 Germany
5 France
5 Germany
对于上面的数据,我预计结果为“4”,因为 user_id 4 的祖先来自英国、法国和德国。
澄清一下:是的,user_id /ancestry 列构成唯一的对,因此给定用户的国家/地区不会重复。我正在寻找来自所有 3 个国家/地区的用户 - 英国、法国和德国(国家/地区是任意的)。
我并不是在寻找特定于某个 RDBMS 的答案。我希望“总体上”回答这个问题。
我满足于为每个查询重新生成 where 子句,前提是可以通过编程方式生成 where 子句(例如,我可以构建一个函数来构建 WHERE / FROM - WHERE 子句)。
尝试这个:
Select user_id
from yourtable
where ancestry in ('England', 'France', 'Germany')
group by user_id
having count(user_id) = 3
最后一行表示用户的祖先拥有全部 3 个国家/地区。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)