我正在寻找一个相当棘手的(对我来说)SELECT语句,它将从语言定义DB中计算字体文件的所有支持语言。
字体的unicodes存储在列表“unicodes' (我们是Python)。 语言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。
我需要的只是那些字体完全支持的语言,例如字体中存在一种语言的所有unicodes。 如果字体中缺少一种语言的一个或多个unicodes(例如,在示例中为228),则德语不会显示。
谢谢!
答案 0 :(得分:0)
您可以使用子查询。使用子查询,我们选择其中包含未包含在字体中的unicodes的语言:
SELECT DISTINCT language FROM languagedefinitions WHERE unicode NOT IN (97,98,99)
然后我们选择子查询中未选择的所有语言。所以,完整的查询会像这样llok:
SELECT DISTINCT language FROM languagedefinitions WHERE language NOT IN (
SELECT DISTINCT language FROM languagedefinitions WHERE unicode NOT IN (97,98,99);
);
答案 1 :(得分:0)
NorthCat的SQL-only子查询解决方案可以工作,但使用集合(0.0004s)比Python中的迭代实现要长得多(0.05s):
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])