什么情况下要用到左右连接?怎么使用左右连接?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么情况下要用到左右连接?怎么使用左右连接?相关的知识,希望对你有一定的参考价值。

什么情况下要用到左右连接,其实有个很常见的场景,最常用的两表连接是内链接,查询到的结果是两表匹配的数据.那么企业中比如是京东,有这么个情况,他的商品表是一张表,他的销售数量是一张表.如果要看到商品的销量,两表内链接就可以了.但是很有可能有些商品没有销量,那么这个数量就会为空,那么通过内链接就查看不到了.没有销售的商品对公司反而更重要,我们要分析为什么销售不出去,要找原因,解决内连接匹配不到的问题,就要用到我们后面说的左右连接.

左右连接的使用其实非常简单,只要记住下面三句总结的话就可以:
1、哪个表要全部展示,就看"没有"“全部”这样的字修饰哪个表.
2、如果想用左连接让该表全部展示,那么就将他放在join的左边,如果想用右连接让该表全部展示,那么就将他放在join的右边.
3、如果表在join的左边,我想然他全部展示,就用左连接,如果表在join的右边,我想让他全部展示,就用右连接
如果想看上面三句话是怎么得出来的,可以去查看下黑马程序员的视频,关于测试的mysql视频教程。
参考技术A 两个表进行链接查询以左(右)表有而右(左)表没有的字段进行显示的情况下 参考技术B 举个例子:现在需要统计超市每个商品买了多少。相关的表有两个:商品表(商品编号,商品名称) 销售表(商品编号,销售数量,月份) 如果直接下面的语句查询,就会遗漏没有销售过的商品。 Select 商品名称,Sum(销售数量)From 商品表,销售表Where 商品表.商品编号=销售表.商品编号这时就需要使用左外连接或者右外连接 Select 商品名称,isnull(Sum(销售数量),0) as 销售数量From 商品表 Left Join 销售表On 商品表.商品编号=销售表.商品编号--SQL SERVER代码--没有销售过的商品,使用Sum(销售数量)会显示为null,用isnull将null值转换成0

linq中怎么实现多条件关联的左右连接

linq左右连接最重要的是DefaultIfEmpty()这个方法和join之后的表中判断是否( temp != null)null,左右连接其实就是表的位置互换。

1、左连接:

from order in context.vab_OrderGoods.Where(i => i.deletef == 0 && i.order_id == orderId && i.input_type == 2)
join goods in context.mst_Goods.Where(k => k.eigyousyo_id == _eigyousyoId)
on order.goods_id equals goods.goods_id into ogt
from og in ogt.DefaultIfEmpty()
join kind in context.mst_GoodsKind.Where(l => l.deletef == 0 && l.eigyousyo_id == _eigyousyoId)
on og.goods_kind_id equals kind.goods_kind_id into tempTable
from temp in tempTable.DefaultIfEmpty()

select new FA2_GoodsInfoModel
{
seq_id = order.seq_id,
order_id = order.order_id,
goods_id = order.goods_id,
deletef = order.deletef,
goods_count = order.goods_count,
goods_name = og.goods_name,
goods_name_kana = og.goods_name_kana,
goods_weight = og.goods_weight,
input_type = order.input_type,
sub_total_goods_weight = order.sub_total_goods_weight,
goods_kind_id = temp != null ? temp.goods_kind_id : 0,
goods_kind_name = temp != null ? temp.goods_kind_name : string.Empty
}

2、右连接:

 

from goods in context.mst_Goods.Where(k => k.eigyousyo_id == _eigyousyoId)

join order in context.vab_OrderGoods.Where(i => i.deletef == 0 && i.order_id == orderId && i.input_type == 2)

on goods.goods_id equals order.goods_id into ogt
from og in ogt.DefaultIfEmpty()
join kind in context.mst_GoodsKind.Where(l => l.deletef == 0 && l.eigyousyo_id == _eigyousyoId)
on og.goods_kind_id equals kind.goods_kind_id into tempTable
from temp in tempTable.DefaultIfEmpty()

 

select new FA2_GoodsInfoModel
{
seq_id = order.seq_id,
order_id = order.order_id,
goods_id = order.goods_id,
deletef = order.deletef,
goods_count = order.goods_count,
goods_name = og.goods_name,
goods_name_kana = og.goods_name_kana,
goods_weight = og.goods_weight,
input_type = order.input_type,
sub_total_goods_weight = order.sub_total_goods_weight,
goods_kind_id = temp != null ? temp.goods_kind_id : 0,
goods_kind_name = temp != null ? temp.goods_kind_name : string.Empty
}

以上是关于什么情况下要用到左右连接?怎么使用左右连接?的主要内容,如果未能解决你的问题,请参考以下文章

把音频信号的左右声道连接起来,对电路有啥影响?

linq中怎么实现多条件关联的左右连接

复合条件连接,内连接,左右连接,自然连接,等值连接

解决CRT连接sqlplus不能上下左右键不能使用

SQLSERVER左右链接怎么写

UnityHTCSteamVR怎么获取左右手柄