0

私はこのような大きな挿入クエリを持っています:

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

ただし、挿入するtag_idsはなく、タグ文字列のみです。したがって、タグIDを挿入するときに、タグIDを検索する必要があります。タグは、次の2つの列を持つルックアップテーブルに格納されます。

+-----+---------+
| 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')

...しかし、これを複数の選択で機能させることはできません。

4

2 に答える 2

2

クエリは次のようになります。

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

于 2012-11-08T13:23:17.613 に答える
1

これを試して ::

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'));
于 2012-11-08T12:44:12.043 に答える