Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
规范化MySQL数据库未更新_Mysql - Fatal编程技术网

规范化MySQL数据库未更新

规范化MySQL数据库未更新,mysql,Mysql,我想做什么: 我有一个包含3个表的规范化数据库。我要做的就是将所有模型值替换为系列值,其中OEMID等于8 我从每个表中选取了5行作为示例: 系列表 +--------+----------+ | series | seriesid | +--------+----------+ | 1001 | 7 | | 10036 | 8 | | 10067 | 9 | | 1007 | 10 | | 10076 | 11 |

我想做什么:

我有一个包含3个表的规范化数据库。我要做的就是将所有
模型
值替换为
系列
值,其中
OEMID
等于8

我从每个表中选取了5行作为示例:

系列表

+--------+----------+
| series | seriesid |
+--------+----------+
| 1001   |        7 |
| 10036  |        8 |
| 10067  |        9 |
| 1007   |       10 |
| 10076  |       11 |
+--------+----------+
+---------+----------------------------------------+
| ModelId | Model                                  |
+---------+----------------------------------------+
|    6694 | 1001 - 71 Flexi Unit Planter - 30Aug01 |
|    8264 | 10036 - 315SJ Backhoe Loader           |
|    8263 | 10067 - 310J Backhoe Loader - 20Jul17  |
|    6693 | 1007 - 60 Lawn Tractor - 30Aug01       |
|    8262 | 10076 - 853JH Tracked Harvester        |
+---------+----------------------------------------+
+------------+----------+-------------+------------------------------+------+-------+----------+---------+-----------------+----------------+
| partnumber | partname | description | imageurl                     | qty  | oemid | seriesid | modelid | functiongroupid | assemblynameid |
+------------+----------+-------------+------------------------------+------+-------+----------+---------+-----------------+----------------+
| A32        | Lens     | RED         | AP3415_________UN01JAN94.gif | 2    |     8 |        7 |    6694 |           12318 |         449980 |
| 14274      | Nut      | M10         | TX1061736______UN20JUL09.gif | 1    |     8 |        8 |    8264 |           13996 |         884056 |
| C1115      | HC       | NLA ORDER   | 0000897883____________A2.gif | 1    |     8 |        9 |    8263 |           13962 |         880092 |
| 03H1626    | BOLT     | 1/4 X 1/2   | M5004__________UN02JAN94.gif | 1    |     8 |       10 |    6693 |           17549 |          89782 |
| 1854       | Screw    | M10 X 80    | TX1030795______UN25OCT07.gif | 4    |     8 |       11 |    8262 |           14029 |         891643 |
+------------+----------+-------------+------------------------------+------+-------+----------+---------+-----------------+----------------+
型号表

+--------+----------+
| series | seriesid |
+--------+----------+
| 1001   |        7 |
| 10036  |        8 |
| 10067  |        9 |
| 1007   |       10 |
| 10076  |       11 |
+--------+----------+
+---------+----------------------------------------+
| ModelId | Model                                  |
+---------+----------------------------------------+
|    6694 | 1001 - 71 Flexi Unit Planter - 30Aug01 |
|    8264 | 10036 - 315SJ Backhoe Loader           |
|    8263 | 10067 - 310J Backhoe Loader - 20Jul17  |
|    6693 | 1007 - 60 Lawn Tractor - 30Aug01       |
|    8262 | 10076 - 853JH Tracked Harvester        |
+---------+----------------------------------------+
+------------+----------+-------------+------------------------------+------+-------+----------+---------+-----------------+----------------+
| partnumber | partname | description | imageurl                     | qty  | oemid | seriesid | modelid | functiongroupid | assemblynameid |
+------------+----------+-------------+------------------------------+------+-------+----------+---------+-----------------+----------------+
| A32        | Lens     | RED         | AP3415_________UN01JAN94.gif | 2    |     8 |        7 |    6694 |           12318 |         449980 |
| 14274      | Nut      | M10         | TX1061736______UN20JUL09.gif | 1    |     8 |        8 |    8264 |           13996 |         884056 |
| C1115      | HC       | NLA ORDER   | 0000897883____________A2.gif | 1    |     8 |        9 |    8263 |           13962 |         880092 |
| 03H1626    | BOLT     | 1/4 X 1/2   | M5004__________UN02JAN94.gif | 1    |     8 |       10 |    6693 |           17549 |          89782 |
| 1854       | Screw    | M10 X 80    | TX1030795______UN25OCT07.gif | 4    |     8 |       11 |    8262 |           14029 |         891643 |
+------------+----------+-------------+------------------------------+------+-------+----------+---------+-----------------+----------------+
主数据表

+--------+----------+
| series | seriesid |
+--------+----------+
| 1001   |        7 |
| 10036  |        8 |
| 10067  |        9 |
| 1007   |       10 |
| 10076  |       11 |
+--------+----------+
+---------+----------------------------------------+
| ModelId | Model                                  |
+---------+----------------------------------------+
|    6694 | 1001 - 71 Flexi Unit Planter - 30Aug01 |
|    8264 | 10036 - 315SJ Backhoe Loader           |
|    8263 | 10067 - 310J Backhoe Loader - 20Jul17  |
|    6693 | 1007 - 60 Lawn Tractor - 30Aug01       |
|    8262 | 10076 - 853JH Tracked Harvester        |
+---------+----------------------------------------+
+------------+----------+-------------+------------------------------+------+-------+----------+---------+-----------------+----------------+
| partnumber | partname | description | imageurl                     | qty  | oemid | seriesid | modelid | functiongroupid | assemblynameid |
+------------+----------+-------------+------------------------------+------+-------+----------+---------+-----------------+----------------+
| A32        | Lens     | RED         | AP3415_________UN01JAN94.gif | 2    |     8 |        7 |    6694 |           12318 |         449980 |
| 14274      | Nut      | M10         | TX1061736______UN20JUL09.gif | 1    |     8 |        8 |    8264 |           13996 |         884056 |
| C1115      | HC       | NLA ORDER   | 0000897883____________A2.gif | 1    |     8 |        9 |    8263 |           13962 |         880092 |
| 03H1626    | BOLT     | 1/4 X 1/2   | M5004__________UN02JAN94.gif | 1    |     8 |       10 |    6693 |           17549 |          89782 |
| 1854       | Screw    | M10 X 80    | TX1030795______UN25OCT07.gif | 4    |     8 |       11 |    8262 |           14029 |         891643 |
+------------+----------+-------------+------------------------------+------+-------+----------+---------+-----------------+----------------+
因此,让我们来看masterdata表中的第一行。我想将系列
1001
替换为
1001-71 Flexi Unit Planter-30Aug01

我所尝试的:

我尝试的第一件事是:

  • 将所有不同型号插入系列表,其中oemid=8

    INSERT INTO SERIES(SERIES) SELECT DISTINCT M.MODEL FROM MASTERDATA MD JOIN MD.MODELID=M.MODELID WHERE MD.OEMID=8;
    
  • 由于
    SERIESID
    列是自动递增的,因此我不需要手动设置id。然后我尝试更新
    MASTERDATA
    表以反映此更改:

    UPDATE MASTERDATA MD JOIN MODEL M ON M.MODELID=MD.MODELID JOIN SERIES S ON S.SERIES=M.MODEL SET MD.SERIESID=S.SERIESID WHERE MD.OEMID=8;
    
  • 此查询的思想是使用
    MODELID
    MODEL
    表连接到
    MASTERDATA
    表,因为我没有更改任何
    MODEL
    值。然后,我加入
    MODEL
    表上的
    SERIES
    表,其中
    MODEL
    等于
    SERIES
    。这将让我获得每个
    型号的
    序列ID
    。然后我只需将
    MASTERDATA
    中的
    SERIESID
    设置为
    SERIESID
    表中的
    SERIESID
    。但是,当我运行它时,它不起作用

    我唯一剩下的选择是编写一个外部程序来处理这个问题,但如果可能的话,我不想采用这种方法。有人能提供解决方案吗

    不确定这是否重要,但我正在Linux CentOS 7上运行DB

    提前谢谢

    编辑1:

    这是插入
    模型
    值后
    系列
    表的外观:

    +----------------------------------------+-----------+
    | series                                 | seriesid  |
    +----------------------------------------+-----------+
    | 1001                                   |         7 |
    | 10036                                  |         8 |
    | 10067                                  |         9 |
    | 1007                                   |        10 |
    | 10076                                  |        11 |
    | 1001 - 71 Flexi Unit Planter - 30Aug01 |       256 |
    | 10036 - 315SJ Backhoe Loader           |       257 |
    | 10067 - 310J Backhoe Loader - 20Jul17  |       258 |
    | 1007 - 60 Lawn Tractor - 30Aug01       |       259 |
    | 10076 - 853JH Tracked Harvester        |       260 |
    +----------------------------------------+-----------+
    
    我的计划是使用上面在
    2上看到的查询。
    然后对series运行查询,以删除
    主数据表中不存在
    SERIESID
    的任何行

    编辑2:

    我的目标是使
    主数据
    看起来像这样:

    +------------+----------+-------------+------------------------------+------+-------+------------+---------+-----------------+----------------+
    | partnumber | partname | description | imageurl                     | qty  | oemid | seriesid   | modelid | functiongroupid | assemblynameid |
    +------------+----------+-------------+------------------------------+------+-------+------------+---------+-----------------+----------------+
    | A32        | Lens     | RED         | AP3415_________UN01JAN94.gif | 2    |     8 |        256 |    6694 |           12318 |         449980 |
    | 14274      | Nut      | M10         | TX1061736______UN20JUL09.gif | 1    |     8 |        257 |    8264 |           13996 |         884056 |
    | C1115      | HC       | NLA ORDER   | 0000897883____________A2.gif | 1    |     8 |        258 |    8263 |           13962 |         880092 |
    | 03H1626    | BOLT     | 1/4 X 1/2   | M5004__________UN02JAN94.gif | 1    |     8 |        259 |    6693 |           17549 |          89782 |
    | 1854       | Screw    | M10 X 80    | TX1030795______UN25OCT07.gif | 4    |     8 |        260 |    8262 |           14029 |         891643 |
    +------------+----------+-------------+------------------------------+------+-------+------------+---------+-----------------+----------------+
    

    请尝试下面的选择查询,您的要求对我来说不是很清楚,但仍希望这能对您有所帮助

    select 
       C.partnumber,
       C.partname,
       C.description,
       C.imageurl, 
       C.qty, 
       C.oemid, 
       A.seriesid, 
       B.ModelId, 
       C.functiongroupid, 
       C.assemblynameid 
    from 
       Series A, 
       Model B, 
       Masterdata C 
    where 
       C.modelid=B.ModelId and 
       A.series = SUBSTRING_INDEX(B.Model,' - ', 1); 
    
    注意:
    子字符串索引
    用于假设
    模型
    表中的
    模型
    列的第一部分与
    系列
    表中的
    系列
    列值相同。如果它的值与您在所讨论的编辑1中提到的值直接匹配,那么我们可以直接相等

    如果上面的选择查询为您提供了所需的输出,那么要直接在
    Masterdata
    中更新
    seriesid
    ,我们可以使用下面的更新查询

    update 
       Series A, 
       Model B, 
       Masterdata C 
    set 
       C.seriesid = A.seriesid 
    where 
       C.modelid=B.ModelId and 
       A.series = SUBSTRING_INDEX(B.Model,' - ', 1); 
    

    如果要删除不匹配的条目,那么我们可以使用与此相同的where子句相反的大小写,希望这会有所帮助,

    S.SERIES=M.MODEL条件不匹配..1001!=1001-71柔性单元播种机-30Aug01@scaisEdge是的,但是我将模型值添加到序列表中,因此它应该与1001-71 Flexi Unit Planter-30Aug01==1001-71 Flexi Unit Planter-30Aug01匹配。不过,我还没有在我的示例中展示它。我将编辑问题以便您查看。更新问题后请告诉我。@scaisEdge现在已更新,请参阅
    edit:
    您编辑的问题不清楚。。1) 已更新的无法从表中删除行2)如果为系列删除与seriesid不匹配的行,则删除插入时插入的扩展字符串。。首先,您需要删除匹配的seriesid,然后使用新id更新主表。。谢谢,我现在就去看看。数据总共约为100M行(在
    MASTERDATA
    表中),因此需要一段时间才能运行。确定,然后尝试在内部表选择中添加一些限制条件,如选择查询-而不是
    MASTERDATA C
    -尝试使用
    (从MASTERDATA limit 10000中选择*C
    )。。这样我们就可以看到逻辑是好是坏,不用等待太久。该死,它只是作为一个空集回来。哦哦。。我甚至试过使用你的虚拟数据,但它对我有效(现在我建议,试着一个接一个地删除
    where
    条件,看看结果,试着推断出哪种条件出了问题..我删除了
    和A.series=SUBSTRING_INDEX(B.Model,'-',1);
    并设法取回数据