最近遇到一个测试数据的需求,需要往一个表中插入4个来源的数据。

往orders 表中插入 来自

  1. sql_person
  2. cm_user_car_model
  3. cm_sp_product_new
  4. 部分固定数据以及两个递增的时间数据

对于4的数据很好处理不过是时间处理,以及固定值的递增。

对于1,2,3部分,第一眼想到的是用cross join来去三个表的笛卡尔积,三个表各取一条拼合在一起插入

例如select a.*,b.*,c.*  from (select * from t1 where... limit 1 ) a

join  (select * from t2 where... limit 1 )b

Join   (select * from t3 where... limit 1 )c

由于没有明确的对应条件,也就没有办法将结果集一一对应,一次性插入(仔细想想应该也可以,不过我将4部分的数据放在a中一起插入,由于递增的需求我只能一天一天的插入)

但是发现 由于 b,c的结果集可能为 null 导致插入数据的时候发生错误,而limit 1 也无法实现在 select * from t2 where...的结果集中随机取一条的目的。。

我改变了一次性插入的策略,选择先插入一条数据,然后通过

LAST_INSERT_ID()(由于是测试库,只有我一个人再用)等方法获取刚插入的数据自增id,通过自增id来update刚刚插入的数据行。

这样就解决了插入条数的问题,不会因为某个子查询为空而使得三个表的join结果也为空了。

但是子查询结果集中随机取一条并没有实现。Limit 1没有解决我的需求,每一次取出来的都是同一条数据,由于mysql 表没有提供rownum,所以实现起来没有oracle那么水到渠成。网络上提供了一种在查询之中加入一个自实现的’rownum’值,再在查询外嵌套一层的查询来将随机的rownum值取得。

这里可以在查询中加入一个新的随机数字段 ra,通过order by ra 来获取一个随机字段。

SELECT

RAND() as ra,

repay_month,

model_id,

car_price

FROM

cm_user_car_model

order by ra

limit 1

这样显的更加简洁。

Mysql 多表数据拼接插入及子查询结果集随机取一条的更多相关文章

  1. MySQL数据库实验:任务二 表数据的插入、修改及删除

    目录 任务二 表数据的插入.修改及删除 一.利用界面工具插入数据 二.数据更新 (一)利用MySQL命令行窗口更新数据 (二)利用Navicat for MySQL客户端工具更新数据 三.数据库的备份 ...

  2. MySQL多表数据记录查询详解

    在实际应用中,经常需要实现在一个查询语句中显示多张表的数据,这就是所谓的多表数据记录连接查询,简称来年将诶查询. 在具体实现连接查询操作时,首先将两个或两个以上的表按照某个条件连接起来,然后再查询到所 ...

  3. mysql复制表数据或表结构到新表中

    MySQL复制表数据到新表的几个步骤. 1.MySQL复制表结构及数据到新表 CREATE TABLE new_table SELECT * FROM old_table; 2.只复制表结构到新表 C ...

  4. mysql复制表数据,多表数据复制到一张表

    对于mysql 复制表数据可以使用 insert into select 方式 示例: $sql="insert into icarzoo.provider(providerId,provi ...

  5. Mysql 复制表数据(表结构相同)

    [1]Mysql 复制表数据(表结构相同) -- 方式一: create table table_name_dest as select * from table_name_src; -- 方式二: ...

  6. MySQL单表数据不超过500万:是经验数值,还是黄金铁律?

    今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行.那么,你觉得这个数值多少才合适呢? 曾经在中国互联网技术圈广为流传着这么一个 ...

  7. MySQL单表数据不要超过500万行:是经验数值,还是黄金铁律?

    本文阅读时间大约3分钟. 梁桂钊 | 作者 今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行.那么,你觉得这个数值多少才合适呢 ...

  8. mysql清空表数据并重置自增ID

    mysql清空表数据并重置自增ID: ## 查看mysql> select * from work_order_company;mysql> show create table work_ ...

  9. MySQL中的DML、DQL和子查询

    一.MySQL中的DML语句 1.使用insert插入数据记录: INSERT INTO `myschool`.`student` (`studentNo`, `loginPwd`, `student ...

随机推荐

  1. TowSum

  2. python基础---列表生成器、迭代器等

    一.列表生成式 用来创建list的表达式,相当于for循环的简写形式 语法: [表达式 for循环 判断条件] ''' 普通写法 ''' def test(): l= [] for i in rang ...

  3. 记一次idea启动tomcat后控制台乱码的坑

    IDEA的编码配置大致跟<IntelliJ IDEA 控制台中文乱码解决方案>一样 但是启动后依旧乱码!why? 后来想起来,之前因为在win10控制台下跑tomcat乱码,所以,改过一个 ...

  4. 【EMV L2】终端风险管理(Terminal Risk Management)

    终端风险管理使大额交易联机授权,并确保芯片交易能够周期性地进行联机以防止在脱机环境中也许无法察觉的风险. 虽然发卡行被强制要求在应用交互特征(AIP)中将终端风险管理位设置成1以触发终端风险管理,但终 ...

  5. php7编译安装-php-fpm.service

    [Unit]Description=php-fpm - Hypertext PreprocessorAfter=network.target remote-fs.target nss-lookup.t ...

  6. chrome window 下的所有key josn

    ["postMessage","blur","focus","close","parent",&qu ...

  7. Python学习之路基础篇--09Python基础,初识函数

    函数可以分为内置函数 和 自定义函数.这次关注的主要是自定义函数.定义函数之后,就可以在任何需要它的地方调用. 1 返回值的重要性 返回值的3种情况 没有返回值 ---- 返回None 不定 retu ...

  8. height属性

    高度属性: height:长度值|百分比|auto 最大高度:max-height 最小高度:min-height 说明:设置块级元素和替换元素的内容高度.

  9. 2018.11.25 AMC-ICPC 亚洲区域赛(焦作站)吊银

    11月23日 大清早,跟着wyb的脚步,早起跑过去听方伟的编译原理,然鹅一点都没听进去,在焦作胡辣汤群里疯狂灌水... 听说焦作那边冷得不行,前一天看天气预报说那边已经是2℃了,都快零下了,然鹅学校里 ...

  10. [小明打联盟][斜率/单调队列 优化dp][背包]

    链接:https://ac.nowcoder.com/acm/problem/14553来源:牛客网 题目描述 小明很喜欢打游戏,现在已知一个新英雄即将推出,他同样拥有四个技能,其中三个小技能的释放时 ...