# Write your MySQL query statement below
2199. 找到每篇文章的主题
表: Keywords
+-------------+---------+ | Column Name | Type | +-------------+---------+ | topic_id | int | | word | varchar | +-------------+---------+ (topic_id, word) 是该表的主键(具有唯一值的列的组合)。 该表的每一行都包含一个主题的 id 和一个用于表达该主题的词。 可以用多个词来表达同一个主题,也可以用一个词来表达多个主题。
表: Posts
+-------------+---------+ | Column Name | Type | +-------------+---------+ | post_id | int | | content | varchar | +-------------+---------+ post_id 是该表的主键(具有唯一值的列)。 该表的每一行都包含一个帖子的 ID 及其内容。 内容仅由英文字母和空格组成。
Leetcode 从其社交媒体网站上收集了一些帖子,并对每个帖子的主题感兴趣。每个主题可以由一个或多个关键字表示。如果某个主题的关键字存在于一个帖子的内容中 (不区分大小写),那么这个帖子就有这个主题。
编写解决方案,根据以下规则查找每篇文章的主题:
"Ambiguous!"
。以 任意顺序 返回结果表。
结果格式如下所示。
示例 1:
输入: Keywords 表: +----------+----------+ | topic_id | word | +----------+----------+ | 1 | handball | | 1 | football | | 3 | WAR | | 2 | Vaccine | +----------+----------+ Posts 表: +---------+------------------------------------------------------------------------+ | post_id | content | +---------+------------------------------------------------------------------------+ | 1 | We call it soccer They call it football hahaha | | 2 | Americans prefer basketball while Europeans love handball and football | | 3 | stop the war and play handball | | 4 | warning I planted some flowers this morning and then got vaccinated | +---------+------------------------------------------------------------------------+ 输出: +---------+------------+ | post_id | topic | +---------+------------+ | 1 | 1 | | 2 | 1 | | 3 | 1,3 | | 4 | Ambiguous! | +---------+------------+ 解释: 1: "We call it soccer They call it football hahaha" "football" 表示主题 1。没有其他词能表示任何其他主题。 2: "Americans prefer basketball while Europeans love handball and football" "handball" 表示主题 1。"football" 表示主题 1。 没有其他词能表示任何其他主题。 3: "stop the war and play handball" "war" 表示主题 3。 "handball" 表示主题 1。 没有其他词能表示任何其他主题。 4: "warning I planted some flowers this morning and then got vaccinated" 这个句子里没有一个词能表示任何主题。注意 “warning” 和 “war” 不同,尽管它们有一个共同的前缀。 所以这篇文章 “Ambiguous!” 请注意,可以使用一个词来表达多个主题。
原站题解
mysql 解法, 执行用时: 643 ms, 内存消耗: 0 B, 提交时间: 2023-10-15 22:57:29
select post_id, ifnull(group_concat(distinct topic_id order by topic_id), 'Ambiguous!') as topic from (select post_id, topic_id as topic_id from Posts p left join Keywords k on lower(content) like concat('% ',word,' %') or content like concat(word,' %') or content like concat('% ',word)) a group by post_id
mysql 解法, 执行用时: 655 ms, 内存消耗: 0 B, 提交时间: 2023-10-15 22:57:07
with t as( select distinct post_id,topic_id from Keywords,Posts where instr(concat(' ',content,' '),concat(' ',word,' '))>0) select post_id, group_concat(topic_id order by topic_id,'') topic from t group by post_id union select P.post_id,'Ambiguous!' from Posts P left join t on P.post_id = t.post_id group by P.post_id having count(t.topic_id)=0