【发布时间】:2019-01-19 11:05:08
【问题描述】:
免责声明:我正在使用带有 2 个表的 MySQL。到目前为止,当使用 IN() 一次查询一个组时,我已经找到了解决我的问题的方法,但没有任何方法可以让我在不循环多个查询的情况下一次完成整个表。
我有两张桌子:
CREATE TABLE WordGroups (
wgId int NOT NULL AUTO_INCREMENT,
groupId int NOT NULL,
word varchar(255) NOT NULL,
PRIMARY KEY (wgId)
);
跟踪关键字组、单词到 groupId 和
CREATE TABLE ArticleWords (
awId int NOT NULL AUTO_INCREMENT,
articleId int NOT NULL,
word varchar(255) NOT NULL,
PRIMARY KEY (awId)
);
跟踪文章中的关键词。
我正在尝试构建一个可以获取单词组的单个查询,并为每个组返回包含至少所有这些单词的所有文章。
我意识到如果我在单个查询中一次查找一个组,这非常简单,但是我似乎无法弄清楚如何在所有匹配子集的集合中生成单个查询结果。
例如假设两个表有以下数据:
词组
groupId | word
-----------------
1 | B
1 | A
2 | C
2 | E
3 | F
ArticleWords
articleId | word
-----------------
1 | A
1 | C
1 | B
2 | C
3 | A
3 | B
3 | F
4 | C
4 | E
4 | F
结果查询将返回:
groupId | articleId
1 | 1
1 | 3
2 | 4
3 | 3
3 | 4
因为这些文章至少包含来自这些组的所有单词。
我尝试使用内部连接将两个表相交,但匹配不完整的单词组导致行:
groupId | articleId
2 | 2
之所以出现在结果中,是因为第 2 条包含单词“C”。我对想法持开放态度,因为我涉足了不太严肃的 MySQL,但这整个星期都在逃避。
非常感谢任何帮助。我正想知道我是否正在尝试让 SQL 做一些它不应该做的事情。我有一个很长的查询,它适用于最多 6 个单词的 WordGroup,但它非常精确且不可扩展,此查询需要适用于任何大小的 WordGroup 才可行。
感谢您的阅读!
【问题讨论】:
标签: mysql sql database performance search