最近遇到一个测试数据的需求,需要往一个表中插入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. Skynet服务热点火焰图分析

    最近花了一周时间对场景服务进行热点分析,利用以前的火焰图工具做了一点微小的贡献,分享下心得(仓库地址在https://github.com/spin6lock/skynet_systemtap_set ...

  2. xdoj-1297 Tr0y And His Startup

    题目: 1297: Tr0y And His Startup 时间限制: 1 Sec  内存限制: 256 MB提交: 18  解决: 8[提交][状态][讨论版] 题目描述 Tr0y创办了一家安全公 ...

  3. 关于jstl中碰到的Property 'username' not found on type java.lang.String异常

    在jstl的forEach循环的时候总是有异常,刚开始以为是把类的属性名打错了,因为显示的是Property not found,但就算从类文件里面复制属性名过来依然显示的是Property not ...

  4. word2007无法打开.doc

    如果您的WORD2007无法打开.DOC文档,可以试试如下的方法 打开注册表编辑器(开始-运行-输入regedit VISTA中在开始菜单最下方的搜索栏内输入regedit) 展开HKEY_CLASS ...

  5. C++ 实验3 类和对象

    Part 2 #ifndef GRAPH_H #define GRAPH_H class Graph { public: Graph(char ch, int n); void draw(); pri ...

  6. javascript中正则动态替换为对象中的相应数据

    使用正则进行替换以下内容 var str = 'aKey={aValue}&bKey={bValue}' 使用以下对象数据,替换value var obj = { aValue: 1, bVa ...

  7. webpack 配置别名,解决 import 时路径查找麻烦的问题

    在编写代码时,使用 import 导入别的文件,可能会遇到查找路径麻烦的问题 比如这里的 ../../ 还要去思考多少个 ../ 那么可以在 webpack 中,将 src 目录设置一个别名,方便文件 ...

  8. 关于地形altas的处理

    前几天在群里跟人讨论地形atlas的问题,因为Blade也是用的4x4的atlas(16张纹理),但是大概是几年前做的,所以一些细节忘记了,在这里做下备忘. 1.atlas就是图集,图册,把多个纹理打 ...

  9. 引擎设计跟踪(九.14.3.4) mile stone 2 - model和fbx导入的补漏

    之前milestone2已经做完的工作, 现在趁有时间记下笔记. 1.设计 这里是指兼容3ds max导出/fbx格式转换等等一系列工作的设计. 最开始, Blade的3dsmax导出插件, 全部代码 ...

  10. mysql的基础用法,水一下

    #和上一篇是一起的,上一篇就是为这个做insert <blockquote>/*思考题*/ create database spj; use spj;create table s( sno ...