如何使用MySQL从一个表行获取数据,并将其复制到具有相同项目编号的其他行
提前感谢您的帮助!我有一个名为ItemStoreDisplayName的表,如下所示:如何使用MySQL从一个表行获取数据,并将其复制到具有相同项目编号的其他行,mysql,Mysql,提前感谢您的帮助!我有一个名为ItemStoreDisplayName的表,如下所示: IsParentItem Size BaseItemID ConfirmationStoreDisplayName yes 10045 Los Angeles Dodgers Authentic Home Jersey S 10045 M 10045
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文件。这可能是我找不到它的原因吗?谢谢你的信息,莱恩。我能够运行原始查询,尽管由于超时和由于记录数量而丢失的连接,它不得不反复尝试。不过,我不得不做另一个类似的更新,我尝试了你的建议,这在这么多数据的情况下运行得更顺利了:谢谢大家的帮助!