Select 行基于单独存储的信息 table
Select rows based on information stored in separate table
首先,对于过于模糊的标题,我深表歉意,但我不熟悉此类问题的正确术语。
我正在尝试从 Wiktionary(维基媒体 wiki-based 词典)中检索页面标题列表,其中页面必须归类在 English_lemmas
下,但必须 而不是 归入 English_phrases
、English_slang
和 English_%_forms
(其中 % 是通配符)。
两个必需的表是包含页面信息(page_id
、page_title
)的 page
和包含每个页面所属类别的 categorylinks
。
page
的相关结构是这样的:
+---------+------------------+
| page_id | page_title |
+---------+------------------+
| 0 | race |
| 1 | racing |
| 2 | that's all folks |
| 3 | fire |
| 4 | psychédélique |
+---------+------------------+
和categorylinks
的相关结构是这样的:(我添加了换行符以便于阅读)
+---------+-------------------------+
| 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
是类别的标题。
我需要 select race
和 fire
,因为它们都属于 English_lemmas
,但 不是 racing
或 that's all folks
因为除了都归入 English_lemmas
之外,它们还分别归入 English_%_forms
和 English_phrases
,而不是 psychédélique
未归入 English_lemmas
.
因此理想的结果是
+---------+------------------+
| page_id | page_title |
+---------+------------------+
| 0 | race |
| 3 | fire |
+---------+------------------+
这是可以有效实现的事情吗?如果是这样,我怎样才能做到这一点?
我对SQL(基本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')
首先,对于过于模糊的标题,我深表歉意,但我不熟悉此类问题的正确术语。
我正在尝试从 Wiktionary(维基媒体 wiki-based 词典)中检索页面标题列表,其中页面必须归类在 English_lemmas
下,但必须 而不是 归入 English_phrases
、English_slang
和 English_%_forms
(其中 % 是通配符)。
两个必需的表是包含页面信息(page_id
、page_title
)的 page
和包含每个页面所属类别的 categorylinks
。
page
的相关结构是这样的:
+---------+------------------+
| page_id | page_title |
+---------+------------------+
| 0 | race |
| 1 | racing |
| 2 | that's all folks |
| 3 | fire |
| 4 | psychédélique |
+---------+------------------+
和categorylinks
的相关结构是这样的:(我添加了换行符以便于阅读)
+---------+-------------------------+
| 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
是类别的标题。
我需要 select race
和 fire
,因为它们都属于 English_lemmas
,但 不是 racing
或 that's all folks
因为除了都归入 English_lemmas
之外,它们还分别归入 English_%_forms
和 English_phrases
,而不是 psychédélique
未归入 English_lemmas
.
因此理想的结果是
+---------+------------------+
| page_id | page_title |
+---------+------------------+
| 0 | race |
| 3 | fire |
+---------+------------------+
这是可以有效实现的事情吗?如果是这样,我怎样才能做到这一点?
我对SQL(基本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')