尝试尽可能最好地解释这一点:
首先,我有一个名为vocabulary
的表:
+-----+---------------------+
| id | name |
+-----+---------------------+
| 1 | Farming |
| 2 | Agriculture |
| 3 | Design |
| 4 | Graphic Design |
| 5 | Interactive Design |
| 6 | Animal Husbandry |
| ... | ... |
| 887 | Carpentry |
+-----+---------------------+
在excel表中,我列出了“相关词汇项”,可能如下所示:
Interactive Design Farming
-------------------- --------------------
Graphic Design Agriculture
Design Animal Husbandry
我想要做的是创建一个名为vocabulary_relations
的表,并在标题(在上面的Excel表格示例中)与其下面的每个项目之间创建关系。例如,Interactive Design将指向平面设计和设计。农业将指向农业和畜牧业。
例如,表格看起来像这样(使用vocabulary
表作为参考):
+----------------+--------------+
| vocabulary_id | related_id |
+----------------+--------------+
| 5 | 4 |
| 5 | 2 |
| 1 | 2 |
| 1 | 6 |
+----------------+--------------+
这样,我可以为related_id
提取所有vocabulary_id
。
例如,如果我请求vocabulary_id = 1
(农业),它将返回related_id => 2, 6
(分别是农业,畜牧业)。
有没有人对如何自动化这样的事情有任何想法?我不是在寻找用户界面,这是静态数据。
谢谢!
答案 0 :(得分:2)
INSERT INTO vocabulary_relations
(vocabulary_id, related_id)
SELECT v1.id, v2.id
FROM RelatedItems ri
INNER JOIN vocabulary v1
ON ri.col1 = v1.name
INNER JOIN vocabulary v2
ON ri.col2 = v2.name
答案 1 :(得分:0)
你有没有考虑过这样的事情? (假设至少对词汇表有一个独特的约束。名称。)
create table vocabulary_relations (
vocabulary_category varchar(35) not null, -- references vocabulary (name),
related_vocabulary varchar(35) not null, -- references vocabulary (name),
primary key (vocabulary_category, related_vocabulary)
);
insert into vocabulary_relations values
('Interactive Design','Graphic Design'),
('Interactive Design','Design'),
('Farming','Agriculture'),
('Farming','Animal Husbandry');
完成后,选择很简单。
select *
from vocabulary_relations
order by vocabulary_category, related_vocabulary;
vocabulary_category related_vocabulary
--
Farming Agriculture
Farming Animal Husbandry
Interactive Design Design
Interactive Design Graphic Design
没有加入。易于理解和排除故障。从CSV导入很简单。