两表联查 条件的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两表联查 条件的问题相关的知识,希望对你有一定的参考价值。

订单表 -- orderId
详情表 id orderId Num
这是一个简单的一对多关系,我现在想查询的是
1.select * from 订单表 join... where (他对应的详情表里,所有子数据的Num为空)
2.select * from 订单表 join... where (他对应的详情表里,所有子数据只要有一条数据有值就显示)
java代码也能实现,但是可能会影响效率。
急!!!!
举个例子吧:想得到的结果
订单表 -- orderId .. .. .. ..
orderId .. ..
1 .. ..
2 .. ..
详情表 id orderId Num
5 1 null
6 1 88
7 2 null
8 2 null
现在要查的是:
1.select * from 订单表 join... where (他对应的详情表里,所有子数据的Num为空)
得到 id为2的订单数据
2.select * from 订单表 join... where (他对应的详情表里,所有子数据的Num只要有一条数据有值就显示)
得到 id为1的订单数据

参考技术A 1 select * from 订单表 a join 详情表 b ... where b.num is null;
2 select * from 订单表 a join 详情表 b ... where b.id||b.orderid||b.num is not null;

b.id||b.orderid||b.num 是oracle的语法,将每行记录的三个列连在一起,判断是否为空。
如果你是用别的数据库 就改下语法。
另外还要注意的是 你的数据库中 多列连接,如果其中一列为空,那么连接的结果是否为空。如果是的话就不能用上面的方法。 那么就用别的思路:对每列进行转换,空为0,非空为1.相加结果>0则符合你的要求。具体函数、语法你可以自己找下。追问

你看我的问题补充吧!!

参考技术B 你的表达真的很不清晰呀。。。
看了好几遍才明白你想要什么,你想要的两个结果:
1. 订单详情中所有num都为null的订单数据
2. 订单详情中所有num不全为null的订单数据

2. select * from 订单表 a where a.orderId in (select distinct orderId from 详情表 b where b.Num != null);
1 的结果是 订单表-2的结果
参考技术C 用的hibernate的关联映射就行了。。。。。

以上是关于两表联查 条件的问题的主要内容,如果未能解决你的问题,请参考以下文章

sql两表联查只要左表一条数据但是查完都多一条

单的两表联查电影管理系统,下拉框回显

sql语句:一个表和另外两个表的关联语句

iwebshop两表联查

数据库中复杂的联查+筛选条件+排序+分页

thinkjs——两表联查