最近遇到一个测试数据的需求,需要往一个表中插入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. mac安装brew简单方法

    安装方法:命令行输入 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/ma ...

  2. Sublime Text 3 package control 解决 "There are no packages available for installation" 错误

    造成这个错误的原因估计是因为由于packagecontrol.io无法访问,所以导致无法读取“https://packagecontrol.io/channel_v3.json”文件的原因. 解决方法 ...

  3. 根据某字段将其他字段进行拼接的两种方法(SYS_CONNECT_BY_PATH及wm_concat)

    秘书姐姐说想知道她发起的所有流程,现在都到谁审批了.由于一条流程当前审批人可能有多个,故需根据单据编号(djbh)将审批人拼接到一个字段中. 说明: wfn审批历史记录表,djbh 单据编号,pk_c ...

  4. APP测试常用工具以及框架

    APP测试常用工具以及框架 1)纯白盒方式的测试,Monkey.一般是开发用的比较多,动手能力强的同学可以自己去尝试下! 2)偏白盒的robotium,这家伙号称是黑盒,但是本人不太认同- 因为使用r ...

  5. JVM垃圾收集器-ParNew收集器

    今天我给大家讲讲ParNew收集器. ParNew收集器 ParNew收集器收集器其实就是Serial收集器的多线程版本,除了使用多线程进行垃圾收集之外,其余行为包括Serial收集器可用的所有控制参 ...

  6. 软件开发者路线图梗概&书摘chapter6

    安排你的课程:靠自己去寻求建议,安排课程 1.阅读列表:维护一张列表,更新未读和已读 保存在公共空间 得出模式.趋势.缺口,决定下一步,得到建议 参考书目形成优先级队列 从宽泛的读起,指导者推荐 能使 ...

  7. siimpleHttpServer 快速建立一个文件服务器

    利用 SimpleHTTPServer 可以非常快速的建立一个http服务器,如果有同学在做共享文件时遇到了困难,只需要一行代码,即可建站完成. 在想要映射的文件夹目录内,执行命令行 python - ...

  8. 移动端web页面列表类上拉加载,查看详情,iframe嵌套第三方页面遇到的问题以及解决办法

    1.移动端上拉加载 网上有很多成熟的插件,比如iscroll.在这里介绍一下用jquery和js写的上拉加载方法.使用原生的去写上拉加载更多需要三个高度去做对比,以新闻类列表举例,首先需要整个dom的 ...

  9. js数据三大储存格式

    一.String格式  做为一个前端者 你第一手得到的数据都是字符串 二.数组格式 1.定义  var arr=[“张三”,”李四”,”王五”]; 数据通过索引去查找对应的元素   arr[3] 2. ...

  10. 集成direnv 与docker-compose 进行环境变量管理

    direnv 是一个不错的换将变量管理工具,同时日常的开发测试中我们使用docker-compose 会比较多,一般我们的玩法是 可以再docker-compose 中指定环境变量,可以通过envir ...