例如:
主表 :MID NAME
001 张三
002 李四
细表:MID DID NAME
001 001 001
001 002 002
001 003 003
001 004 004
002 005 001
002 006 002
以细表的NAME为查询条件,查找包含值为 001,002,003的MID
应返回001,因为002的细表不包含003,各位老师看得懂吗?
主表 :MID NAME
001 张三
002 李四
细表:MID DID NAME
001 001 001
001 002 002
001 003 003
001 004 004
002 005 001
002 006 002
以细表的NAME为查询条件,查找包含值为 001,002,003的MID
应返回001,因为002的细表不包含003,各位老师看得懂吗?
-- Author: liangCK 小梁
-- Date : 2008-11-10 14:42:21
---------------------------------
--> 生成测试数据: @主表
DECLARE @主表 TABLE (MID VARCHAR(3),NAME VARCHAR(4))
INSERT INTO @主表
SELECT '001','张三' UNION ALL
SELECT '002','李四'
--> 生成测试数据: @细表
DECLARE @细表 TABLE (MID VARCHAR(3),DID VARCHAR(3),NAME VARCHAR(3))
INSERT INTO @细表
SELECT '001','001','001' UNION ALL
SELECT '001','002','002' UNION ALL
SELECT '001','003','003' UNION ALL
SELECT '001','004','004' UNION ALL
SELECT '002','005','001' UNION ALL
SELECT '002','006','002'--SQL查询如下:SELECT b.*
FROM
(
SELECT MID
FROM @细表
WHERE MID IN('001','002','003')
GROUP BY MID
HAVING COUNT(*)>=3
) AS a
JOIN @主表 AS b
ON a.MID=b.MID/*
MID NAME
---- ----
001 张三(1 行受影响)*/
go
create table [主表]([mid] varchar(3),[name] varchar(4))
insert [主表]
select '001','张三' union all
select '002','李四'
if object_id('[细表]') is not null drop table [细表]
go
create table [细表]([mid] varchar(3),[did] varchar(3),[name] varchar(3))
insert [细表]
select '001','001','001' union all
select '001','002','002' union all
select '001','003','003' union all
select '001','004','004' union all
select '002','005','001' union all
select '002','006','002'select * from [主表]
select * from [细表]select MID from [主表] a
where (select count(distinct(NAME)) from [细表] where MID=a.MID and NAME in ('001','002','003'))=3--测试结果:
/*
MID
----
001(1 row(s) affected)
*/