mysql - 从相关表中插入具有给定值和值的多行

标签 mysql sql

我有一个像这样的大型插入查询:

INSERT INTO video_tags
  (vid_id, tag_id)
VALUES
  (1,7),
  (2,46),
  (2,52) Etc. Etc.

但是我没有要插入的 tag_id,只有标签字符串。因此,我需要在插入标签时查找标签 ID。标签存储在包含两列的查找表中:

+-----+---------+
| id  | int     |
| tag | varchar |
+-----+---------+

我想做这样的事情:

INSERT INTO video_tags
  (vid_id, tag_id)
VALUES
  (1, SELECT id FROM tags WHERE tag = 'banana'),
  (2, SELECT id FROM tags WHERE tag = 'tree')
  (2, SELECT id FROM tags WHERE tag = 'chimps')

...但这行不通,而且看起来既麻烦又低效。

我也看到过这样做:

INSERT INTO video_tags
  (vid_id, tag_id)
VALUES
  SELECT '1', id FROM tags WHERE tag = 'banana')

...但我无法让它与多个选择一起使用。

最佳答案

您的查询可能是这样的:

CREATE TABLE rawdata
    (`vid_id` int, `tag_name` varchar(10))
;

INSERT INTO rawdata
    (`vid_id`, `tag_name`)
VALUES
    (1, 'banana'),
    (2, 'tree'),
    (2, 'chimps')
;

INSERT INTO video_tags
SELECT rawdata.vid_id, tag.id FROM
rawdata
LEFT JOIN tag ON tag.tag = rawdata.tag_name
;

DROP TABLE rawdata

http://sqlfiddle.com/#!2/89171/2

关于mysql - 从相关表中插入具有给定值和值的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13289331/

相关文章:

javascript - Node.js 在 mysql 中使用异步/等待

mysql - SQL查询,根据另一列选择一列的组

sql - 按周分组,如何得到空周?

python - MySQLdb 连接问题

mysql - 使用 union 或 left join 从多个表中获取结果

sql - 导出 Azure SQL 数据库时出现错误 SQL71501

sql - 递归更新语句

sql - 使用 SQL + XQuery 将 Xml 转换为基于列的数据

MySQL 找到在 2 个部门中赚最多钱的员工

c# - 程序启动时如何启动mysql数据库?