首页 > 编程知识 正文

mysql查询全部数据遍历,mysql查询结果批量插入到另外的表

时间:2023-05-03 06:56:47 阅读:183764 作者:2893

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

主要问题:

movie_tab里的sname卡通名和集数之间有空格

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。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。