【发布时间】:2013-02-17 01:14:05
【问题描述】:
我正在尝试编写一些 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 word list。
【问题讨论】:
-
有趣的问题,但我想尽可能多地在代码中做这件事。
-
我考虑过,但在内存中处理 200k 字似乎相当耗费资源。你能指出我有什么资源可以通过有效的方式在代码中处理这种数据吗?
-
我原以为您可以检索这 200,000 个单词的子集以在代码中使用?您是否考虑过调整字谜算法以适应此目的?
-
200K 单词乘以平均每个单词 7-8 个字符(对于某些语言可能是最坏的情况)将产生约 1.5-3Mb 的纯数据(取决于您是否使用 Unicode 等)。当然不是大量的数据可供使用。
标签: sql sql-server sql-server-2008