【问题标题】:Query a list of names from one table that appear in a field in a different table从一个表中查询出现在另一个表的字段中的名称列表
【发布时间】:2009-12-05 20:30:21
【问题描述】:

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

例子:

table1.title>老虎伍兹作弊,老虎伍兹崩溃,布拉德皮特很棒,麦当娜收养,布拉德皮特拍电影

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

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

有人建议使用内部联接,但我无法使用它...感谢您的帮助!谢谢。

【问题讨论】:

  • @Mike,您能否指定您的平台以便在 SQL 实现中使用特定功能?也许您更喜欢严格的 ANSI SQL?
  • MySQL。我是初学者..这就是你要找的吗?
  • 我只是在尝试编写 SQL 查询来产生这个结果。

标签: sql mysql


【解决方案1】:

用途:

  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 中引用它以按升序或降序排序。

【讨论】:

    【解决方案2】:

    您确实想使用连接,但是您的连接条件将是模式匹配,而不是相等。这假设您要查找完全匹配的名称(即 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;
    

    【讨论】:

    • 这是一个很大的帮助。如何将此结果插入新表。不知道如何按结果分组插入。
    • 只需在选择上方添加一个标准插入子句,就这么简单。插入子句看起来像:insert (colA, colB, ...)
    猜你喜欢
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多