根据存储在单独表中的信息选择行

时间:2017-12-11 17:55:03

标签: mysql sql wikimedia wikimedia-dumps

首先,我很抱歉这个过于模糊的标题,但我不熟悉这样一个问题的正确术语。

我正在尝试从维基词典(维基媒体基于维基词典)中检索页面标题列表,其中页面必须在English_lemmas下分类,但必须归类于{ {1}},English_phrasesEnglish_slang(其中%是通配符)。

两个必要的表格English_%_forms包含页面信息(pagepage_id)和page_title,其中包含每个页面分类的类别。

page的相关结构如下:

categorylinks

categorylinks的相关结构是这样的:(我添加了换行符以便于阅读)

+---------+------------------+
| page_id | page_title       |
+---------+------------------+
| 0       | race             |
| 1       | racing           |
| 2       | that's all folks |
| 3       | fire             |
| 4       | psychédélique    |
+---------+------------------+

其中+---------+-------------------------+ | cl_from | cl_to | +---------+-------------------------+ | 0 | English_lemmas | | 0 | English_verbs | | 1 | English_lemmas | | 1 | English_verbs | | 1 | English_non-lemma_forms | | 2 | English_lemmas | | 2 | English_phrases | | 3 | English_lemmas | | 3 | English_nouns | | 4 | French_lemmas | | 4 | French_adjectives | +---------+-------------------------+ 是对categorylinks.cl_from的直接引用,page.page_id是该类别的标题。

我需要选择categorylinks.cl_torace,因为它们都归类于fire,但不是 English_lemmasracing除了在that's all folks下分类之外,它们还分别归入English_lemmasEnglish_%_forms,而不归English_phrases,因为它未归类于psychédélique

因此理想的结果是

English_lemmas

这是否可以有效实现?如果是这样,我怎么能实现这一目标?

我对SQL(基本的SELECT,UPDATE等语句)有一个相当基本的理解,所以这样的事情远远超出了我的理解。

1 个答案:

答案 0 :(得分:2)

如果我理解你的要求:

select *
  from page
  where page_id not in (select cl_from from categorylinks
                         where cl_to like 'English_%_forms'
                            or cl_to like 'English_phrases')
    and page_id in (select cl_from from categorylinks
                      where cl_to like 'English_lemmas')