欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

怎样两表联合筛选出如下数据,见正文

更新时间: 2014-01-05 02:17:48 责任编辑: Author_N1

 

怎样两表联合筛选出如下数据,见正文:在线等
情境如下:
订单表A:
A01(订单号)  
-----------
m01          
m02          
...

货品表B:
B01  B02
-----------
m01  'ok'
m01  'ok'
m01  'no'
m02  'ok'
m02  'ok'
...

想要得到如下结果:
原理是:只要A表中的订单号A01在B表中所对应的B02字段全部='ok',则把这些订单查询出来。
怎么用最简单的语句实现?
比如上面查询出来只有m01符合条件。

--参考方法--
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-12-23 16:09:31
-- Version:
--      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
-- Dec 28 2012 20:23:12 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[A]
if object_id('[A]') is not null drop table [A]
go 
create table [A]([A01] varchar(3))
insert [A]
select 'm01' union all
select 'm02'
--> 测试数据:[B]
if object_id('[B]') is not null drop table [B]
go 
create table [B]([B01] varchar(3),[B02] varchar(2))
insert [B]
select 'm01','ok' union all
select 'm01','ok' union all
select 'm01','no' union all
select 'm02','ok' union ALL
select 'm02','ok'
--------------开始查询--------------------------


select * from [A] 
WHERE EXISTS (SELECT 1 FROM b WHERE a.[a01]=b.[b01] AND b.[b02]='ok')
AND NOT EXISTS (SELECT 1 FROM b WHERE a.[a01]=b.[b01] AND b.[b02]='no')
----------------结果----------------------------
/* 
A01
----
m02

*/

--参考方法--
引用:
情境如下:
订单表A:
A01(订单号)  
-----------
m01          
m02          
...

货品表B:
B01  B02
-----------
m01  'ok'
m01  'ok'
m01  'no'
m02  'ok'
m02  'ok'
...

想要得到如下结果:
原理是:只要A表中的订单号A01在B表中所对应的B02字段全部='ok',则把这些订单查询出来。
怎么用最简单的语句实现?
比如上面查询出来只有m01符合条件。
符合条件的是m02吧
--参考方法--


select * from 订单表A 

where A01 not in (select B01 from 货品表B where B02 =  'no')


--参考方法--
改了一下:


if object_id('[A]') is not null drop table [A]
go 
create table [A]([A01] varchar(3))
insert [A]
select 'm01' union all
select 'm02'


if object_id('[B]') is not null drop table [B]
go 
create table [B]([B01] varchar(3),[B02] varchar(2))
insert [B]
select 'm01','ok' union all
select 'm01','ok' union all
select 'm01','no' union all
select 'm02','ok' union ALL
select 'm02','ok'



select A.A01
from A
inner join B
        on a.A01 = b.B01
group by A.A01
having COUNT(case when b.B02 = 'Ok' then 1 else null end) = COUNT(*)
/*
A01
m02
*/
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:17:48
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/8136/
本文WWW.DOC100.NET DOC100.NET版权所有。