例如:
主表 :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,各位老师看得懂吗?

解决方案 »

  1.   

    ---------------------------------
    --  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 行受影响)*/
      

  2.   

    if object_id('[主表]') is not null drop table [主表]
    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)
    */