MySQL多对多关系表

时间:2017-05-05 12:37:49

标签: sql database many-to-many eclipselink mariadb

我有两个已连接的表,但关系是ManyToOne但我想将其更改为ManyToMany,因为它更适合它,但在创建新的ManyToMany表时。

CostCenter
IdCostCenter CostCenterNumber CostCenterName
1            1                Name 1 
2            2                Name 2


TravelCostCenterLine
IdCostCenterLine IdTravelComponent  SplitLine Percentage IdCostCenter
1                      1                0        25           1
2                      1                0        25           2
3                      1                1        30           1
4                      1                1        20           2
5                      2                0        100          1

所以我想将它改为多个,一个TravelCostCenterLine有多个CostCenter,同一个CostCenter可以分配给多个行

因此,我需要多对多的关系表看起来像这样,但我不知道如何插入填充信息:

LineCostCenterMapping
IdLineCostCenterMapping IdCostCenter SplitLine IdTravelComponent
1                            1          0            1
1                            2          0            1
2                            1          1            1
2                            2          1            1
3                            1          0            2

我开始编写插入查询,这将填充此表的数据,但我不知道如何完成它

INSERT INTO LineCostCenterMapping (IdCostCenter, SplitLine, IdTravelComponent)
      SELECT
        ce.IdCostCenter,
        tcl.SplitLine,
        tcl.IdTravelComponent
      FROM TravelCostCenterLine tcl
        JOIN
        CostCenter
        ce ON tcl.IdCostCenter = ce.IdCostCenter;

所以它看起来像LineCostCenterMapping示例

2 个答案:

答案 0 :(得分:1)

没有特殊的语法来填充多对多表,这是通常的插入语句,但是您将在 LineCostCenterMapping 中插入的值应该已经存在于 CostCenter TravelCostCenterLine 。要确保您可以在GUI中使用此约束,例如Combobox或自动填充字段,其现有值为 CostCenter TravelCostCenterLine

您能提供有关您的应用程序的更多信息:编程语言,DBMS ......

答案 1 :(得分:0)

为此,您必须创建一个新表。 例如,表格如下:

CostCenter

IdCostCenter CostCenterNumber CostCenterName
1            1                Name 1 
2            2                Name 2

TravelCostCenterLine

IdCostCenterLine IdTravelComponent  SplitLine Percentage
1                      1                0        25          
2                      1                0        25          
3                      1                1        30          
4                      1                1        20          
5                      2                0        100 

然后你应该使用这两个表关系id创建新表

third_table

id      costCenterid               TravelCostCenterLine
1   primary_key_of_first_table     primary_key_of_second_table

最后一个表将保存两个基表之间的关系。