oracle左连接查询去重,左连接去重(objec)

需求场景:

1、前端使用的object-table(angularJs)

2、自定义模糊查询

可以模糊查询主表,主表没有数据的时候,可通过字表的(name或者hostname)字段来查询(主-子:一对多的关系)。两个表通过p_id和t_name关联

eg:主表A

id

name

pid

t_name

1

aa

1

test1

2

bb

2

test1

3

ccc

1

test2

4

ddd

3

test3

字表B

id

pid

t_name

b_name

isTrue

1

1

test1

ee

y

2

1

test2

aa

y

3

2

test1

ff

y

4

3

test4

ww

n

原本是查询A表,然后展示(可模糊查询),只展示A表的数据。但是后需求变为模糊查询的时候,如果A表查不到数据,即根据B表的b_name找出A表的数据

这里有个使用技巧,当后台使用拼接sql的时候,where 1=2 或者 where 1=1可以少写很多代码,因为你不确定where 后面是否有条件

select a.*,b.b_name from A a left join B b on(a.pid=b.pid and a.t_name=b.t_name) where 1=2 or a.name like '%aa%'  or  b.b_name like '%aa%';

这样得到的结果是

id

name

pid

t_name

b_name

1

aa

1

test1

ee

1

aa

1

test1

aa

因为我只展示A表,所以其实我是不用select b.b_name的。在页面的时候就隐藏了b_name这列。

id

name

pid

t_name

1

aa

1

test1

1

aa

1

test1

这样导致了数据重复了,导致数据不对。

select a.*,b.b_name from A a left join B b on(a.pid=b.pid and a.t_name=b.t_name) where 1=2 or a.name like '%aa%'  or  b.b_name like '%aa%';

如果我去重复只显示一条,数据也是不对的,因为明明是两条数据,数据库查出来去重也是两条,只是那个字段没显示而已。

重复数据不是客户要的结果。

那么就不要显示b.b_name然后去重

select distinct a.* from A a left join B b on(a.pid=b.pid and a.t_name=b.t_name) where 1=2 or a.name like '%aa%'  or  b.b_name like '%aa%';

这样就会得到一条数据,这就是我们想要的结果了

But!!!!

虽然我们得到了想要的结果。但是因为没有select b表的b_name导致前端表格是没有这个字段展示的。

如果A中没有查询到内容,就会用B表的b_name字段去查询。使用object-table模糊查询的时候,它不会有数据显示

假如使用B表中的“ff”去查询数据,实际上是有一条数据的,但是前端就是不显示(后台已返回该数据)

select distinct a.* from A a left join B b on(a.pid=b.pid and a.t_name=b.t_name) where 1=2 or a.name like '%ff%'  or  b.b_name like '%ff%';

应该得到的数据

id

name

pid

t_name

b_name

2

bb

2

test1

ff

实际展示的数据

id

name

pid

t_name

2

bb

2

test1

得到这样的数据之后,再去模糊查询“ff”,后台会返回这条数据,但是前端就不不显示,想了好久才知道,原来是object-table自带的过滤导致的,虽然数据已经到前端了(本应该正常显示),但是因为前端列表中没有‘ff’字符串,然后搜索框中又有‘ff’字符串。

解决方法:1、因为用的是后端的模糊查询,可以关掉object-table自带的过滤(因为对object-table不熟,所以也不知道怎么关闭,这是自己想的理想状态。。。)

2、吧b_name这里在前端显示出来,但是也不要让前面的数据重复。这就是重点了,动态拼接前端模糊查询的字段(‘aa’就是模糊查询的字符串),这里需要好生理解,或者建两个简单的表测试一下

select distinct a.* ,‘aa’ as  b_name from A a left join B b on(a.pid=b.pid and a.t_name=b.t_name) where 1=2 or a.name like '%aa%'  or  b.b_name like '%aa%';

id

name

pid

t_name

b_name

1

aa

1

test1

ee

1

aa

1

test1

aa

结果由最上面的变成

id

name

pid

t_name

b_name

1

aa

1

test1

aa

这样数据就不会重复,然后前端又能过滤(通过子表来查询到主表的内容)

SQL左连接查询 left join ... on

左连接查询 保留左边主表的所有行(即使在右表没有匹配的行),右表输出满足 on 条件的行,不满足的输出null   示例:组合两个表 - 力扣 表1: Person +--------------+- ...

mysql之左连接、右连接、内连接、全连接、等值连接、交叉连接等

mysql中的各种jion的记录,以备用时查 1.等值连接和内连接, a.内连接与等值连接效果是相同的,执行效率也相同,只是书写方式不一样,内连接是由SQL 1999规则定的书写方式 比如: sele ...

mysql 内连接、左连接、右连接

记录备忘下,初始数据如下: DROP TABLE IF EXISTS t_demo_product; CREATE TABLE IF NOT EXISTS t_demo_product( proid ...

《Entity Framework 6 Recipes》中文翻译系列 (16) -----第三章 查询之左连接和在TPH中通过派生类排序

翻译的初衷以及为什么选择来学习,请看本系列开篇 3-10应用左连接 问题 你想使用左外连接来合并两个实体的属性. 解决方案 假设你有 ...

数据库中的左连接(left join)和右连接(right join)区别

Left Join / Right Join /inner join相关 关于左连接和右连接总结性的一句话: 左连接where只影向右表,右连接where只影响左表. Left Join select ...

MySQL的左连接、右连接和全连接的实现

表student:+----+-----------+------+| id | name | age |+----+-----------+------+| 1 | Jim | 18 || 2 | ...

Oracle 左连接、右连接、全外连接、(+)号作用

分类: Oracle Oracle  外连接 (1)左外连接 (左边的表不加限制)       (2)右外连接(右边的表不加限制)       (3)全外连接(左右两表都不加限制) 外连接(Outer ...

Linq连接查询之左连接、右连接、内连接、全连接、交叉连接、Union合并、Concat连接、Intersect相交、Except与非查询

内连接查询 内连接与SqL中inner join一样,即找出两个序列的交集 Model1Container model = new Model1Container(); //内连接 var query ...

LINQ的左连接、右连接、内连接

.左连接: var LeftJoin = from emp in ListOfEmployees join dept in ListOfDepartment on emp.DeptID equals ...

随机推荐

Spark DAGSheduler生成Stage过程分析实验

RDD.Action触发SparkContext.run,这里举最简单的例子rdd.count() /** * Return the number of elements in the RDD. */ ...

vc6 使用的那些事

VC6.0中Release下调试模式设置 http://blog.csdn.net/wangqinghao/article/details/7730428

C#封装好的Win32API

Kernel.cs using System; using System.Runtime.InteropServices; using System.Text; using HANDLE = Syst ...

安装一些包管理的记录 win10

我大php的composer 国内镜像包http://pkg.phpcomposer.com/  还是全局的爽些: omposer config -g repo.packagist composer ...

Spring MVC 线程安全问题的思考

Spring MVC 线程安全问题的思考 在读一些博文的时候发现有些文章对SpringMVC的Controller线程安全的验证并不正确,比如没有探究controller线程不安全的具体原因,比如将请 ...

类似百度音乐唱片播放时CD图片不停旋转的实现

类似百度音乐唱片播放时CD图片不停旋转的实现 效果图 1 html代码 2

ZOJ 2760 How Many Shortest Path

题目大意:给定一个带权有向图G=(V, E)和源点s.汇点t,问s-t边不相交最短路最多有几条.(1 <= N <= 100) 题解:从源点汇点各跑一次Dij,然后对于每一条边(u,v)如 ...

使用Sphinx生成静态网页

转载来自 http://www.ibm.com/developerworks/cn/opensource/os-sphinx-documentation/ 简介 Sphinx 是一种工具,它允许开发人 ...

Thrift序列化与反序列化的实现机制分析

Thrift是如何实现序死化与反序列化的,在IDL文件中,更改IDL文件中的变量序号或者[使用默认序号的情况下,新增变量时,将新增的变量不放在IDL文件的结尾,均会导致Thrift文件的反序列后无法做 ...

第二次项目冲刺(Beta阶段)5&period;21

1.提供当天站立式会议照片一张 会议内容: ①检查前一天的任务情况,做出自我反省. ②制定新一轮的任务计划. 2.每个人的工作 (1)工作安排 队员 今日进展 明日安排 王婧 #53实现多对多查重 # ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值