免责声明:我将mysql与两个表一起使用。到目前为止,我已经找到了解决问题的方法,即使用in()一次查询一个组,但没有任何方法可以让我一次完成整个表,而不必循环多次查询。
我有两张table:
CREATE TABLE WordGroups (
wgId int NOT NULL AUTO_INCREMENT,
groupId int NOT NULL,
word varchar(255) NOT NULL,
PRIMARY KEY (wgId)
);
它跟踪关键字组、单词到组ID以及
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
文章词
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个字,但它是非常准确,不可扩展的,这个查询将需要为任何大小的字组是可行的。
谢谢你的阅读!
1条答案
按热度按时间vd2z7a6w1#
这里有一个方法,使用
group_concat()
作为比较:这是一个sql小提琴。