伙计我有一个MySQL数据库表我试图填写另一个表中的数据但是映射到一个公共代码。
例如:
UPDATE signs_labels_products p
SET p.ebay_cat_id = (
SELECT c.ebay_cat_id
FROM signs_labels_ebay_categories_by_signcode c
WHERE p.SignCode = c.sign_code
)
WHERE p.ebay_cat_id = '' OR p.ebay_cat_id IS NULL LIMIT 5000;
运行良好但缓慢(因此限制条款)。
我遇到的问题是我打算同时填写其他字段,例如:
UPDATE signs_labels_products p
SET p.ebay_cat_id = (SELECT c.ebay_cat_id
FROM signs_labels_ebay_categories_by_signcode c
WHERE p.SignCode = c.sign_code),
p.ebay_category = (SELECT c.ebay_category
FROM signs_labels_ebay_categories_by_signcode c
WHERE p.SignCode = c.sign_code),
p.store_category = (SELECT c.store_category
FROM signs_labels_ebay_categories_by_signcode c
WHERE p.SignCode = c.sign_code)
WHERE p.ebay_cat_id = '' OR p.ebay_cat_id IS NULL LIMIT 5000;
这不是最好的,而且肯定会更加整洁,以为我会问你们的意见和帮助。
任何改进都非常感谢:)
无论如何,感谢阅读。
JB
答案 0 :(得分:2)
为什么不使用JOIN而不是子查询
UPDATE signs_labels_products p
join signs_labels_ebay_categories_by_signcode c on c.sign_code = p.SignCode
set
p.ebay_cat_id = c.ebay_cat_id,
p.ebay_category = c.ebay_category,
p.store_category = c.store_category
WHERE p.ebay_cat_id = '' OR p.ebay_cat_id IS NULL
确保加入密钥已编入索引,如果不是
alter table signs_labels_products add index SignCode_idx(SignCode);
alter table signs_labels_ebay_categories_by_signcode
add index sign_code_idx(sign_code)
答案 1 :(得分:0)
UPDATE signs_labels_products p
inner join signs_labels_ebay_categories_by_signcode c
on p.SignCode = c.sign_code
SET
p.ebay_cat_id = c.ebay_cat_id ,
p.ebay_category = c.ebay_category ,
p.store_category = c.store_category
WHERE p.ebay_cat_id = '' OR p.ebay_cat_id IS NULL LIMIT 5000;