例如表:
姓名 | 地点 |
---|---|
约翰·史密斯 | 纽约1131413431 |
约翰·史密斯 | 纽约2222213 |
马克怀特 | 波士顿111118174124712 |
莎拉·菲利普斯 | 纽约2222123 |
莎拉·菲利普斯 | 波士顿2222918 |
我试图仅查询它们存在于 2 个或更多城市的名称(对于此数据集的情况,它几乎总是最多 2 个城市)。因此,从这张表中,只有 Sarah Philips 应该返回。
我用“like NewYork% 或 like Boston%”运算符编写了一个查询,其中 count(location) > 1。但是这样做也会返回 John Smith,因为 NewYork 字符串有多种变体。城市名称后面的字符长度也是随机的。
如果数据始终采用这种形式,意味着位置由字符串后跟一些数字组成,您可以使用
SUBSTRING
进行正则表达式检查,并将其放入 HAVING
子句中:
SELECT
name
FROM yourtable
GROUP BY
name
HAVING
COUNT (DISTINCT SUBSTRING(Location,'\D+')) > 1;
这将根据要求仅返回出现在不同地点的人员。
看到这个样本小提琴