我正在尝试编写一些 SQL 来接受一组字母并返回它可以生成的所有可能的单词。我的第一个想法是创建一个基本的三表数据库,如下所示:
Words -- contains 200k words in real life
------
1 | act
2 | cat
Letters -- contains the whole alphabet in real life
--------
1 | a
3 | c
20 | t
WordLetters --First column is the WordId and the second column is the LetterId
------------
1 | 1
1 | 3
1 | 20
2 | 3
2 | 1
2 | 20
但是我有点坚持如何编写一个查询,该查询返回在 WordLetters 中为传入的每个字母都有一个条目的单词。它还需要考虑具有两个相同字母的单词。我从这个查询开始,但它显然不起作用:
SELECT DISTINCT w.Word
FROM Words w
INNER JOIN WordLetters wl
ON wl.LetterId = 20 AND wl.LetterId = 3 AND wl.LetterId = 1
我将如何编写查询以仅返回包含传入的所有字母并考虑重复字母的单词?
其他信息:
我的 Word 表包含近 200,000 个单词,这就是我尝试在数据库端而不是在代码中执行此操作的原因。如果有人关心,我正在使用enable1 单词列表。