查询显示在不同表中的字段中的一个表的名称列表

时间:2009-12-05 20:30:21

标签: sql mysql

我想查询一个表中出现在另一个表中的字段中的名称列表。

示例:

table1.title>老虎伍兹秘籍,老虎伍兹崩溃,布拉德皮特很棒,麦当娜采纳,布拉德皮特拍电影

table2.names>老虎伍兹,布拉德皮特,麦当娜

所以这些是两个表和值。我想编写一个查询来计算table2.names中哪些名称最常出现在table1.title

有人建议使用内部联接,但我无法让它工作......我很感激帮助!谢谢。

2 个答案:

答案 0 :(得分:2)

使用:

  SELECT a.names,
         COUNT(b.titles) AS num
    FROM TABLE_2 a
    JOIN TABLE_1 b ON INSTR(b.title, a.names) > 0
GROUP BY a.names
ORDER BY num DESC

请参阅有关INSTR()的文档 - 检查大于0的值表示名称中出现的名称,否则为零。

AS num是列别名,您可以在ORDER BY中引用该列别名,以ASCending或DESCending顺序排序。

答案 1 :(得分:1)

您确实想要使用连接,但是您的连接条件将是模式匹配,而不是相等。这假设您要查找确切的名称匹配(即table2.names中的确切值包含在table1.title列中的某个位置/字符串中的任何位置而不是部分匹配):

select   t2.names, count(*)
from     table2 t2
join     table1 t1
on       t1.title like('%' + t2.names + '%')
group by t2.names
order by count(*) desc;