【发布时间】:2023-03-18 10:42:01
【问题描述】:
我有两张表,一张带有国家前缀,另一张带有拨打电话。
前缀表可能如下所示:
+------+-----------+-----------+
| id | country | prefix |
+------+-----------+-----------+
| 1 | USA | 1 |
| 2 | canada | 1 |
| 3 | spain | 4 |
+------+-----------+-----------+
调用表:
+-----------+-------------------+
| id | destination |
+-----------+-------------------+
| 1 | 1 |
| 2 | 1 |
| 3 | 4 |
| 4 | 1441 |
+-----------+-------------------+
我想知道每个国家打了多少电话:
select count(*) as calls
from calls as t1
inner join prefixes as t2
on t1.destination like CONCAT('%', t2.prefix)
问题是美国和加拿大有相同的前缀,我得到双重结果,我还必须使用当前表而不添加/编辑。
是否可以遍历调用表,但只搜索每个前缀一次?
预期结果: 3 次呼叫前缀 1(美国/加拿大), 1 次致电西班牙。
【问题讨论】:
-
通过这些表格,您无法根据定义找出每个国家/地区的通话次数,因为您无法区分美国和加拿大。那么你期望结果是什么? 1.两次美国,一次西班牙; 2.两次加拿大,一次西班牙; 3.美国一次,加拿大一次,西班牙一次; 4. 还有什么?
-
谢谢,添加了预期结果