Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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,提前感谢您的帮助!我有一个名为ItemStoreDisplayName的表,如下所示: IsParentItem Size BaseItemID ConfirmationStoreDisplayName yes 10045 Los Angeles Dodgers Authentic Home Jersey S 10045 M 10045

提前感谢您的帮助!我有一个名为ItemStoreDisplayName的表,如下所示:

IsParentItem   Size BaseItemID  ConfirmationStoreDisplayName
yes                 10045       Los Angeles Dodgers Authentic Home Jersey
               S    10045       
               M    10045       
               L    10045       
               XL   10045       
yes                 77245       San Francisco Giants 5950 Game Cap
               S    77245       
               M    77245       
               L    77245       
               XL   77245       
IsParentItem   Size BaseItemID  ConfirmationStoreDisplayName
yes                 10045       Los Angeles Dodgers Authentic Home Jersey
               S    10045       Los Angeles Dodgers Authentic Home Jersey
               M    10045       Los Angeles Dodgers Authentic Home Jersey
               L    10045       Los Angeles Dodgers Authentic Home Jersey
               XL   10045       Los Angeles Dodgers Authentic Home Jersey
yes                 77245       San Francisco Giants 5950 Game Cap
               S    77245       San Francisco Giants 5950 Game Cap
               M    77245       San Francisco Giants 5950 Game Cap
               L    77245       San Francisco Giants 5950 Game Cap
               XL   77245       San Francisco Giants 5950 Game Cap
…等等

我需要做的是从IsParentItem='yes'所在的项中获取ConfirmationStoreDisplayName,并使用匹配的BaseItemID将该数据复制到其他行中。因此,当更新完成时,我希望它看起来像这样:

IsParentItem   Size BaseItemID  ConfirmationStoreDisplayName
yes                 10045       Los Angeles Dodgers Authentic Home Jersey
               S    10045       
               M    10045       
               L    10045       
               XL   10045       
yes                 77245       San Francisco Giants 5950 Game Cap
               S    77245       
               M    77245       
               L    77245       
               XL   77245       
IsParentItem   Size BaseItemID  ConfirmationStoreDisplayName
yes                 10045       Los Angeles Dodgers Authentic Home Jersey
               S    10045       Los Angeles Dodgers Authentic Home Jersey
               M    10045       Los Angeles Dodgers Authentic Home Jersey
               L    10045       Los Angeles Dodgers Authentic Home Jersey
               XL   10045       Los Angeles Dodgers Authentic Home Jersey
yes                 77245       San Francisco Giants 5950 Game Cap
               S    77245       San Francisco Giants 5950 Game Cap
               M    77245       San Francisco Giants 5950 Game Cap
               L    77245       San Francisco Giants 5950 Game Cap
               XL   77245       San Francisco Giants 5950 Game Cap
我意识到这对于数据库来说是糟糕的表结构,但这是一次更新,我将通过csv导入到不同的系统中,需要这样的数据。如果我需要将父项与子项分开,并使用两个单独的表来实现这一点,我可以这样做

我试过这个:

 UPDATE
 ItemStoreDisplayName AS Child
 CROSS JOIN (
 SELECT DISTINCT 
    BaseItemID, ConfirmationStoreDisplayName, IsParentItem 
  FROM 
    ItemStoreDisplayName
  WHERE 
    IsParentItem='yes'
) AS Parent
USING (BaseItemID)
SET
  Child.ConfirmationStoreDisplayName = Parent.ConfirmationStoreDisplayName
。。。但我得到了这个错误: 错误:超过锁定等待超时;尝试重新启动事务

任何帮助都将不胜感激:
Kathy

我已经测试了您的SQL代码,它工作得非常完美,因此您所遇到的错误是由于内部的一些奇怪之处。出现这种情况的原因可能有很多,但我尽量避免技术上的问题。因此,让我们看看一些可能的错误解决方案:

一个可能的修复方法是简单地重新启动MySQL服务器; 如果您正在谈论的表包含大量数据,请转到/etc/my.cnf配置文件并查找包含以下内容的行: innodb\u锁定\u等待\u超时=。。。 网络读取超时=。。。 净写入超时=。。。 表\u锁定\u等待\u超时=。。。 取消这些注释,然后将它们的值提高到300左右,最后重新启动MySQL服务器;如果您想知道为什么要取消所有这些注释,那么,似乎只有其中一个会起作用,但您不知道是哪一个,因为这取决于服务器配置

最后一个可能有点激进的解决方案是将表放到备份文件中,重新启动MySQL服务器,然后从该备份中恢复它。
交叉联接可以创建超时

我将根据…创建一个临时查找表

SELECT BASEITEMID, DESC FROM INVENTORY WHERE DESC != ""

然后创建一个update语句,该语句在SET子句中包含一个子查询,该子查询将填充缺少的信息。

谢谢Woofy!我尝试重新启动MySQL服务器,但没有成功。我正在尝试查找您提到的my.cnf文件。我正在我的电脑上搜索它,它说没有找到结果。你知道我在哪里找这个吗。我在mac上,我使用.dmg安装程序在mac上安装了MySQL。。。我没有使用tar文件。这可能是我找不到它的原因吗?谢谢你的信息,莱恩。我能够运行原始查询,尽管由于超时和由于记录数量而丢失的连接,它不得不反复尝试。不过,我不得不做另一个类似的更新,我尝试了你的建议,这在这么多数据的情况下运行得更顺利了:谢谢大家的帮助!