我正在寻找一个相当棘手的(对我来说) SELECT语句,它将从语言定义数据库中计算字体文件的所有支持语言。
字体的unicodes存储在列表'unicodes‘中(我们在Python中)。language DB有两列,一列是语言名称,另一列是整数形式的unicode,如下所示:
(language) - (unicode)
English - 97 #a
English - 98 #b
English - 99 #c
German - 97 #a
German - 98 #b
German - 99 #c
German - 228 #ä我当前的SQL语句如下:
"SELECT DISTINCT language FROM languagedefinitions WHERE unicode = %s;" % (' OR unicode = '.join(map(str, unicodes())))问题是,这将输出字体部分支持的所有语言。具有unicodes 97-99的字体将同时输出英语和德语,而该字体中缺少德语(228)所需的unicode。
相反,我只需要字体完全支持的那些语言,例如,一种语言的所有unicode都存在于字体中。如果字体中缺少来自一种语言的一个或多个unicode(假设示例中为228 ),则不应显示德语。
谢谢!
发布于 2014-05-04 06:40:01
您可以使用子查询。使用子查询,我们选择字体中没有包含unicodes的语言:
SELECT DISTINCT language FROM languagedefinitions WHERE unicode NOT IN (97,98,99)然后,我们选择子查询中未选择的所有语言。因此,完整查询将如下所示:
SELECT DISTINCT language FROM languagedefinitions WHERE language NOT IN (
SELECT DISTINCT language FROM languagedefinitions WHERE unicode NOT IN (97,98,99);
);发布于 2014-05-04 20:28:59
NorthCat的SQL-only子查询解决方案有效,但比Python中使用集合的迭代实现耗时(0.05s)多(0.0004s):
from sets import Set
# First step, get all languages
languagenames = web.db.dbexec("SELECT DISTINCT language FROM languagedefinitions;")
# Second step, get all unicodes from one language and compare them against the font using sets.Set()
supportedLanguages = []
for languagename in languagenames:
unicodesPerLanguage = web.db.dbexec("SELECT unicode FROM languagedefinitions WHERE language = '%s';" % (languagename))
if Set(x[0] for x in unicodesPerLanguage).issubset(Set(unicodesInFont)):
supportedLanguages.append(languagename[0])https://stackoverflow.com/questions/23449343
复制相似问题