如果地址数据存储如下所示,那么查询用户是否属于特定国家/地区的最佳方法是什么?还有很多其他条件需要,所以为了简单起见,我提供了这种格式。
在这种情况下,做union
是最有效的方法吗?
表格
用户
| id |name|primaryaddrid (FK to Address id)|
|----|----|--------------------------------|
|1 |bill|1 |
用户地址
|id|userid|addrid |
|--|------|---------|
|1 |1 |2 |
|2 |1 |3 |
地址
|id|addrline1|country|
|--|---------|-------|
|1 |1 main st|usa |
|2 |1 main st|italy |
|3 |1 main st|peru |
执行查询以检查美国中有多少用户
您可以计算useraddresses
表中有多少不同的userid
(至少(在美国有一个带有count(distinct)
的地址和一个相关的子查询:
select count(distinct userid) as cnt
from useraddresses ua
where exists (select 1 from address a where a.id = ua.addrid and a.country = 'usa')