如何使用存储过程和事务将 table 中的相关数据插入其他 table 中?
How can I insert into a table related data in other tables using stored procedure and transaction?
我有一个 table 已经导入到数据库中。此 table 具有一系列用户友好的数据,因为它来自 Excel 模板,该模板导出为 CSV,然后导入到 table。
在一个过于简单的例子中,我有以下内容:
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. |
+----------+--------------------+------------------+-------------------------------------+
这些列的数据属于包含更多相关特征的不同 table,例如:
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
列的相关数据,以便能够使用存储过程将其插入到另一个 table 中? 我是试图得到这样的东西:
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
)并将其插入另一个table(即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 ;
我有一个 table 已经导入到数据库中。此 table 具有一系列用户友好的数据,因为它来自 Excel 模板,该模板导出为 CSV,然后导入到 table。 在一个过于简单的例子中,我有以下内容:
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. |
+----------+--------------------+------------------+-------------------------------------+
这些列的数据属于包含更多相关特征的不同 table,例如:
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
列的相关数据,以便能够使用存储过程将其插入到另一个 table 中? 我是试图得到这样的东西:
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
)并将其插入另一个table(即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 ;