| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
9年前发布

Mysql中的级联查询

我的所有的表都是没有关联关系的,解耦

一共是四个表  tb_user 用户表

CREATE TABLE `tb_user` (
  `id` int(100) NOT NULL AUTO_INCREMENT COMMENT 'Id',
  `name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `age` double(255,0) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

tb_order 订单表

CREATE TABLE `tb_order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `price` double(255,0) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

tb_goods 商品表

CREATE TABLE `tb_goods` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `weight` double(11,0) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

他们的关系是 用户表和订单表是一对多,一个用户可以创建多个订单,

订单和商品是多对多,一个订单可以拥有多个商品,当然一个商品也可以拥有多个订单,这里的商品是类级别的商品

他们是多对多关系所以说必须拥有一个中间表,也就是tb_order_goods

CREATE TABLE `tb_order_goods` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `order_id` int(11) DEFAULT NULL,
  `goods_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

中间表就是用来关联Order和User的


这个是我所有的表

SELECT*from tb_goods;
SELECT*from tb_order;
SELECT*from tb_order_goods;
SELECT*from tb_user;

现在我们根据用户ID查询用户所有的订单,和订单相关的信息

分析可以知道现在求的是交集,

inner join 和 left join  ,right join的关系就是交集,和补集的关系

SELECT column_name(s)  FROM table_name1  INNER JOIN table_name2   ON table_name1.column_name=table_name2.column_name


这个表很直观,刚刚的需求也就是要交集

所以现在开始写sql

SELECT      g. NAME  FROM      tb_order o  INNER JOIN tb_order_goods og ON o.id = og.order_id  INNER JOIN tb_goods g ON og.order_id = g.id  WHERE      o.user_id = 1


这个sql就是说的是获取user_id =1 购买的所有商品


其他两个的话是求补给

现在让那个我们来试一试,看看结果咯

SELECT   *  FROM   tb_order o  LEFT JOIN tb_order_goods og ON og.order_id = o.id  LEFT JOIN tb_goods g ON g.id = og.goods_id  WHERE   o.user_id = 1

现在我们看看right join ,其实很简单,高中数学好的话,基本没有问题,有问题肯定是智商问题

看图

这个就是咯,现在看sql 语句咯,其实很简单的啦,设计数据库的时候最好不要有管理关系,这样迁移还有拓展不好,你懂得

SELECT   *  FROM   tb_order o  RIGHT  JOIN tb_order_goods og ON og.order_id = o.id  RIGHT JOIN tb_goods g ON g.id = og.goods_id  WHERE   o.user_id = 1

这个是结果


来自: http://my.oschina.net/heinrichchen/blog/601496

 本文由用户 jopen 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1452659931636.html
MySQL 数据库服务器