连接N个表得到查询结果
id sex
1 0
2 1
1 1
4 1
7 1
6 1
7 0同时去掉与SEX为0的id相同的所有记录
最后将删除所有id 为1和7的记录要怎么写?

解决方案 »

  1.   

    ---------------------------------
    --  Author: liangCK 小梁
    ---------------------------------
     
    --> 生成测试数据: @T
    DECLARE @T TABLE (id INT,sex INT)
    INSERT INTO @T
    SELECT 1,0 UNION ALL
    SELECT 2,1 UNION ALL
    SELECT 1,1 UNION ALL
    SELECT 4,1 UNION ALL
    SELECT 7,1 UNION ALL
    SELECT 6,1 UNION ALL
    SELECT 7,0--SQL查询如下:SELECT *
    FROM @T
    WHERE ID NOT IN(SELECT id FROM @T WHERE sex=0)/*
    id          sex
    ----------- -----------
    2           1
    4           1
    6           1(3 行受影响)
    */
      

  2.   

    SELECT * FROM getA() 
    union   all    SELECT * FROM getB() 
    union   all    SELECT * FROM getC() id sex 
    1 0 
    2 1 
    1 1 
    4 1 
    7 1 
    6 1 
    7 0 
    通过表连接得到的数据
    要不我就再写一个函数,哈哈
      

  3.   

    SELECT *
    FROM(
        SELECT * FROM getA() 
        union  all    SELECT * FROM getB() 
        union  all    SELECT * FROM getC() 
    ) AS A
    WHERE ID NOT IN(SELECT id 
                    FROM(
                        SELECT * FROM getA() 
                        union  all    SELECT * FROM getB() 
                        union  all    SELECT * FROM getC() 
                    ) AS B
                    WHERE sex=0
             )
      

  4.   

    --search
    select * from tb where id not in (select id from tb where sex = 0)--delete
    delete from tb where id not in (select id from tb where sex = 0)--1.点<插入源代码>/<SQL>
    --2.发帖的第二天可以加100分一次.
    --3.你不是版主,不能编辑内容.
      

  5.   

    select * from tb where id not in (select id from tb where sex = 0)
      

  6.   

    delete tb where id in (select id from tb where sex=0) and sex=1
    delete tb where id=1 or id=7
      

  7.   

    select * from tb where id not in (select id from tb where sex = 0)
      

  8.   


    declare @table table (id int,sex int)
    insert into @table select 1,0
          union all    select 2,1
          union all    select 1,1
          union all    select 4,1
          union all    select 7,1
          union all    select 6,1
          union all    select 7,0
    select * from @table where id not in (select id from @table where sex=0)
    2 1
    4 1
    6 1
      

  9.   


    SELECT *
    FROM(
        SELECT * FROM getA() 
        union  all    SELECT * FROM getB() 
        union  all    SELECT * FROM getC() 
    ) AS A
    WHERE ID NOT IN(SELECT id 
                    FROM(
                        SELECT * FROM getA() 
                        union  all    SELECT * FROM getB() 
                        union  all    SELECT * FROM getC() 
                    ) AS B
                    WHERE sex=0
             )
    问题一:
    这个结果反回,id,sex
    如果有还有个表TAB2
    如何能返回TAB2表中所有ID等于这次返回结果的记录,同时在结果中加入这个表中的sex字段有点复杂哈.
    问题二:
    现在功能基本已经实现了,不过我也不知道这么写是否合理,因为太复杂了这样,我把自己的思路写出来,如果您有时间帮我分析一下
    一共有下边几个表文件:文件序号,父序号,文件名称,权限序号(表示针对所有人)
    用户:用户序号,用户名称
    组:组序号,组名称用户组:用户序号,组序号权限:权限序号,F,W,R用户文件权限:用户序号,文件序号,权限序号
    组文件序号:组序号,文件序号,权限序号
    查找文件(用户,文件父序号)
    查找所有对应权限R为1的文件
    先查用户
    再查组
    再查文件.所有人去掉重复
    优先级是1.用户,2.组,3.所有人也就是如果用户对应的文件的R权限为0
    查组的时候不显示这个文件
    查找所有人时则要排除用户与组中所有R权限为0的记录
    最后返回文件.* ,权限.*我是这么做的,
    写一个查用户文件的函数,一个查组对文件的函数,一个查所有人文件的函数
    返回结果:文件序号,禁止读取,权限然后union  all 三者记录
    最后再写一个函数用这次提问的方法去掉禁止读取为0的文件序号对应的所有记录然后再显示文件表中的所有文件序号等于这次结果的记录,同时显示这次结果中的权限想一想太复杂了,自己都描述不清楚...
    当然,如果第一个问题解决这一些就都成功了.只每一次都要用到N条SELECT 语句,不知道对性能是否有影响
    除此之外不知道还有没有更好的方法........
      

  10.   


    SELECT *
    FROM(
        SELECT * FROM getA() 
        union  all    SELECT * FROM getB() 
        union  all    SELECT * FROM getC() 
    ) AS A
    WHERE ID NOT IN(SELECT id 
                    FROM(
                        SELECT * FROM getA() 
                        union  all    SELECT * FROM getB() 
                        union  all    SELECT * FROM getC() 
                    ) AS B
                    WHERE sex=0
             )
    问题一:
    这个结果反回,id,sex
    如果有还有个表TAB2
    如何能返回TAB2表中所有ID等于这次返回结果的记录,同时在结果中加入这个表中的sex字段有点复杂哈.
    问题二:
    现在功能基本已经实现了,不过我也不知道这么写是否合理,因为太复杂了这样,我把自己的思路写出来,如果您有时间帮我分析一下
    一共有下边几个表文件:文件序号,父序号,文件名称,权限序号(表示针对所有人)
    用户:用户序号,用户名称
    组:组序号,组名称用户组:用户序号,组序号权限:权限序号,F,W,R用户文件权限:用户序号,文件序号,权限序号
    组文件序号:组序号,文件序号,权限序号
    查找文件(用户,文件父序号)
    查找所有对应权限R为1的文件
    先查用户
    再查组
    再查文件.所有人去掉重复
    优先级是1.用户,2.组,3.所有人也就是如果用户对应的文件的R权限为0
    查组的时候不显示这个文件
    查找所有人时则要排除用户与组中所有R权限为0的记录
    最后返回文件.* ,权限.*我是这么做的,
    写一个查用户文件的函数,一个查组对文件的函数,一个查所有人文件的函数
    返回结果:文件序号,禁止读取,权限然后union  all 三者记录
    最后再写一个函数用这次提问的方法去掉禁止读取为0的文件序号对应的所有记录然后再显示文件表中的所有文件序号等于这次结果的记录,同时显示这次结果中的权限想一想太复杂了,自己都描述不清楚...
    当然,如果第一个问题解决这一些就都成功了.只每一次都要用到N条SELECT 语句,不知道对性能是否有影响
    除此之外不知道还有没有更好的方法........