在mysql中创建关系表

时间:2011-07-28 15:16:14

标签: mysql sql

尝试尽可能最好地解释这一点:

首先,我有一个名为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(分别是农业,畜牧业)。

有没有人对如何自动化这样的事情有任何想法?我不是在寻找用户界面,这是静态数据。

谢谢!

2 个答案:

答案 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导入很简单。