MySQL批量插入查询出来的数据

timg.jpg
  • 先看SQL:
INSERT INTO `movie_detail_tab` (VIDEO_ID, PLAY_URL) SELECT
    b.ID AS VIDEO_ID,
    x.playurl AS PLAY_URL
FROM
    (
        SELECT
            a.playurl,
            CONCAT(
                a.`卡通名`,
                a.`第几集`
            ) AS 'videoCname'
        FROM
            (
                SELECT
                    playurl,
                    SUBSTRING_INDEX(sname, ' ', 1) AS '卡通名',

                IF (
                    SUBSTRING_INDEX(sname, ' ' ,- 1) < 10,
                    CONCAT(
                        0,
                        SUBSTRING_INDEX(sname, ' ' ,- 1)
                    ),
                    SUBSTRING_INDEX(sname, ' ' ,- 1)
                ) AS '第几集'
                FROM
                    `movie_tab`
            ) a
    ) x
INNER JOIN `video_detail_tab` b ON x.videoCname = b.VIDEO_CNAME
WHERE
    x.playurl NOT IN (
        SELECT
            c.PLAY_URL
        FROM
            `movie_detail_tab` c
    );
  • 涉及三个表:

1. movie_detail_tab

id VIDEO_ID PLAY_URL
1 152 09f5280806d0fbab9fcc3c7f2ce37cc8
2 153 d9c427446ca5aeceb5c0d7f310858373

2. movie_tab

id sname playurl
1 海贼王 1 98aed93a41bd4fe07f5824420511674c
2 海贼王 2 598ce51cb2be1edbbc3dd2ce32a8af47

3. movie_detail_tab

id VIDEO_CNAME
1 海贼王01
2 海贼王02
  • 要实现批量插入不重复的movie_tab中的playurl以及对应movie_detail_tab中的id到movie_detail_tab

  • 主要问题:

  1. movie_tab里的sname卡通名和集数之间有空格
  2. movie_detail_tab里的VIDEO_CNAME小于10的集数有数字0,比如01集
  • 主要通过三个MySQL函数解决

1. SUBSTRING_INDEX(str,delim,count)

  • str:要处理的字符串
  • delim:分隔符
  • count:计数
    返回从字符串str分隔符delim中的计数发生前的子字符串。 如果计数是正的,则返回一切到最终定界符(从左边算起)的左侧。如果count为负,则返回一切到最后一个分隔符(右算起)的右侧。SUBSTRING_INDEX() 搜索delim时进行区分大小写的匹配。

2. IF()
在MySQL中IF()函数的用法类似于java中的三目运算符
IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。

3. CONCAT()
CONCAT(str1,str2,…)
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

你可能感兴趣的:(MySQL批量插入查询出来的数据)