BUG背景
我们有一个订单表 和 一个 物流表 它们通过 订单ID 进行一对一的关系绑定。但是由于物流表在保存订单信息的时候没有做判断该订单是否已经有物流信息,
这就变成同一个订单id在物流表中存在多条数据,也就变成了本来订单表只有100条纪录,而left join 物流表后,所查询的订单数据远远大于100条。总结
趁着上面这个问题,自己来复习下join语句
和 distinct
关键字,同时说明如何解决就算关联是一对多,但我还是想只显示100条订单数据的方法。
一、理论
先再讲下关联表查询的几种表达式,网上找了一张图,通过这张图就能理解所有关联查询的含义。
left join(左联接)
返回包括左表
中的所有记录和右表中联结字段相等的记录 。right join(右联接)
返回包括右表
中的所有记录和左表中联结字段相等的记录。inner join(等值连接)
只返回两个表中联结字段相等的行。
二、left join一对一和一对多
1、一对一关联表查询
业务逻辑1
有两张表,一张商品表、一张商品订单表回显订单列表的时候需要订单表关联商品表,如下
1)商品表
DROP TABLE IF EXISTS `t_product`;
CREATE TABLE `t_product` (
`product_id` char(32) NOT NULL DEFAULT '' COMMENT '主键ID',
`pro_name` varchar(64) DEFAULT NULL COMMENT '商品名称',
`cash` double(10,2) DEFAULT '0.00' COMMENT '商品价格',
`pro_code` varchar(32) DEFAULT NULL COMMENT '商品编号',
PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';
INSERT INTO `t_product` (`product_id`, `pro_name`, `cash`, `pro_code`)
VALUES
('1','小米',888.00,