SQLite计算一个表中的名称与另一个表中的名称字符串的出现次数

时间:2017-02-09 23:55:42

标签: sql sqlite

在搜索互联网之后,我可以自信地说我找不到另一个有同样问题的帖子,所以让我解释一下我想要做什么。

我想要做的是从Members表中选择所有名称,并计算每个名称在Call表的字符串列中出现的次数。

注意:Call表中的Members列是一个varchar,它接收来自我的应用程序的连接字符串。

      Member Table                  Call Table

FirstName     LastName              Members                       Officers
--------      --------              -------                       --------
John          Smith                 John Smith,John Smith2        John Smith
John          Smith2                John Smith,John Smith3        John Smith2
John          Smith3                John Smith2                   John Smith,John Smith3
John          Smith4                John Smith2,John Smith3       John Smith3

我想要的是什么:

FullName              nameCount
--------              ---------
John Smith                4
John Smith2               5
John Smith3               4
John Smith4               0

我在其他地方看到的方法并不是很成功。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

它不会很快但你可以使用外卡加入表格 - 比如

 SELECT *
 FROM Member M
 JOIN Call C ON C.Members LIKE '%' ||M.FirstName || ' ' || M.LastName || '%'

这将为您提供所有成员的呼叫表中的所有位置。

现在只是分组并计数。

 SELECT M.FirstName || ' ' || M.LastName as FullName, COUNT(*) as nameCount
 FROM Member M
 JOIN Call C ON C.Members LIKE  '%' ||M.FirstName || ' ' || M.LastName || '%'
 GROUP BY M.FirstName || ' ' || M.LastName 

重新阅读你的问题我不是名字末尾的1,2,3。大多数数据不是这样的,但如果你的数据不是那么你需要防范 - 就像这样:

 SELECT M.FirstName || ' ' || M.LastName as FullName, COUNT(*) as nameCount
 FROM Member M
 JOIN Call C ON (C.Members LIKE '%' ||M.FirstName || ' ' || M.LastName || ',%')  OR
                (C.Members LIKE '% ' ||M.FirstName || ' ' || M.LastName)

 GROUP BY M.FirstName || ' ' || M.LastName 

这只会查找名称后面带有,或前面有空格的名称。