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

Mysql 根据存储在单独表中的信息选择行,mysql,sql,wikimedia,wikimedia-dumps,Mysql,Sql,Wikimedia,Wikimedia Dumps,首先,我为这个过于模糊的标题感到抱歉,但是对于这样的问题,我不熟悉合适的术语 我正试图从维基百科词典检索页面标题列表,其中页面必须分类在英语引理下,但不能分类在英语短语、英语俚语和英语%\\形式下,其中%是通配符 这两个必要的表是page,其中包含页面信息page\u id、page\u title,以及categorylinks,其中包含每个页面所属的类别 其相关结构如下: +---------+------------------+ | page_id | page_title

首先,我为这个过于模糊的标题感到抱歉,但是对于这样的问题,我不熟悉合适的术语

我正试图从维基百科词典检索页面标题列表,其中页面必须分类在英语引理下,但不能分类在英语短语、英语俚语和英语%\\形式下,其中%是通配符

这两个必要的表是page,其中包含页面信息page\u id、page\u title,以及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_to是类别的标题

我需要选择race和fire,因为它们都属于英语引理,但不是racing,或者这就是所有人,因为除了都属于英语引理之外,它们还分别属于英语形式和英语短语,而不是psychédélique,因为它不属于英语引理

因此,理想的结果是

+---------+------------------+
| page_id | page_title       |
+---------+------------------+
| 0       | race             |
| 3       | fire             |
+---------+------------------+
这是可以有效实现的吗?如果是这样,我如何才能做到这一点


我对SQL basic SELECT、UPDATE等语句有相当基本的了解,因此类似这样的内容远远超出我的理解。

如果我正确理解了您的要求:

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')

从某些角度来看:categorylinks包含21868252行,其中494550行是cl_to='English_引理'的位置。是否可以指定页面需要有一行cl_to='English_引理'?否则,它将从不同的语言中选择页面,这些页面被分类在法语引理之下。我应该在示例中对此进行扩展。我认为我的更正和更新的答案应该满足您的要求。它不仅完美,而且似乎在大桌子上也能很好地工作。非常感谢你!您只需要两个选择:SELECT page.*FROM page JOIN categorylinks在page_id=cl_FROM WHERE cl_to='English_引理'和page_id NOT在SELECT cl_FROM FROM categorylinks中,cl_喜欢'English_%\u forms'或cl_喜欢'English_短语';。也许查询优化器可以解决这个问题,但我不会打赌。你是对的。我想它也会跑得快一点。