如何解决如何使用存储过程和事务将与其他表相关的数据插入到表中?
我有一个已导入数据库的表。该表具有一系列用户友好的数据,这些数据来自Excel模板,该模板先导出为CSV,然后导入到表中。 在一个过于简化的示例中,我得到了以下内容:
MYDB.CSV
+----------+--------------------+------------------+-------------------------------------+
| language | item | title | description |
+----------+--------------------+------------------+-------------------------------------+
| Spanish | Grandioso Artículo | Gran Título | Este es un ejemplo en español. |
| English | Powerful Item | Power Title | This is an example in english. |
| French | Incroyable Article | Incroyable Titre | Ceci est un exemple en français. |
| English | Dull Item | Dull Title | This is another example in english. |
+----------+--------------------+------------------+-------------------------------------+
这些列的数据属于包含更多相关特征的不同表,例如:
MYDB.LANGUAGES
════╤════════════════════
id │ code description
────┼────────────────────
1 │ eng English
2 │ spa Spanish
3 │ fra French
════╧════════════════════
MYDB.ITEMS
════╤═══════════════════════════════
id │ code description
────┼───────────────────────────────
1 │ dull-789 Dull Item
2 │ incr-456 Incroyable Article
3 │ gran-123 Grandioso Artículo
4 │ powe-951 Powerful Item
════╧═══════════════════════════════
如何获取相关数据到mydb.csv
列,以便能够使用存储过程将其插入到另一个表中?我正在尝试获得以下内容:>
MYDB.NICETABLE
id │ code description title
════╪═══════════════════════════════════════
1 │ spa gran-123 Gran Título
2 │ eng powe-951 Powerful Item
3 │ fra incr-456 Incroyable Titre
4 │ eng dull-789 Dull Title
我已经在存储过程中尝试了以下代码。必须按原样插入的数据,例如本示例中的csv.title
,我可以将其插入::
DELIMITER //
DROP PROCEDURE IF EXISTS addItems //
CREATE PROCEDURE addItems ()
BEGIN
START TRANSACTION;
/* INSERT INTO the corresponding tables */
INSERT INTO mydb.nicetable (title)
SELECT `title` FROM csv;
COMMIT;
END //
DELIMITER ;
CALL addBrand();
如何比较逐行数据(即csv.language
)并得到我需要的数据(即languages.code
)并将其插入另一个表(即nicetable.code
)?
解决方法
SELECT就像任何查询一样,遵循相同的规则。
在您的情况下,您使用语言制作了子句
如果您需要其他表中的数据,则需要将它们联接起来。
DELIMITER //
DROP PROCEDURE IF EXISTS addItems //
CREATE PROCEDURE addItems ()
BEGIN
START TRANSACTION;
/* INSERT INTO the corresponding tables */
INSERT INTO mydb.nicetable (code,title)
SELECT (SELECT `code` FROM LANGUAGES LS WHERE LS.description = c.language LIMIT 1),c.`title` FROM csv c;
COMMIT;
END //
DELIMITER ;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。