SQL研究(MS-SQL)之一:筛选数据

摘抄自论坛资源:http://topic.csdn.net/u/20081023/13/6d3b2fd6-39fa-4efe-9fd2-d1ea11b08091.html

要求如下:

=================================================

Table1
字段1  字段2
1001  TRUE
1003  FALSE
1006  FALSE
1002  TRUE
1002  FALSE
1004  FALSE
Table2
字段1  字段2
1003  FALSE
1006  FALSE
1004  FALSE
也就是从表1中筛选出字段2从来没有为TRUE的记录

=================================================

 

实现:

方法1:(临时表,生成于tempdb下,查询分析器下可以查看到)

  1. --> 生成测试数据: #T
  2. IF OBJECT_ID('tempdb.dbo.#T') IS NOT NULL DROP TABLE #T
  3. CREATE TABLE #T (字段1 INT,字段2 VARCHAR(5))
  4. INSERT INTO #T
  5. SELECT 1001,'TRUE' UNION ALL
  6. SELECT 1003,'FALSE' UNION ALL
  7. SELECT 1006,'FALSE' UNION ALL
  8. SELECT 1002,'TRUE' UNION ALL
  9. SELECT 1002,'FALSE' UNION ALL
  10. SELECT 1004,'FALSE'
  11. --SQL查询如下:
  12. SELECT *
  13. FROM #T AS t
  14. WHERE NOT EXISTS
  15.       (
  16.         SELECT * 
  17.         FROM #T
  18.         WHERE 字段1=t.字段1
  19.          AND 字段2='True'
  20.       )
  21. /*
  22. 字段1         字段2
  23. ----------- -----
  24. 1003        FALSE
  25. 1006        FALSE
  26. 1004        FALSE
  27. (3 行受影响)
  28. */

方法2:

  1. declare @tb table(f1 int, f2 varchar(5))
  2. insert @tb 
  3. SELECT 1001,  'TRUE' UNION ALL 
  4. SELECT 1003,  'FALSE' UNION ALL 
  5. SELECT 1006,  'FALSE' UNION ALL 
  6. SELECT 1002,  'TRUE' UNION ALL 
  7. SELECT 1002,  'FALSE' UNION ALL 
  8. SELECT 1004,  'FALSE'
  9. select * from @tb  as a where not exists(select 1 from @tb where f1=a.f1 and f2='TRUE')
  10. /*
  11. f1          f2    
  12. ----------- ----- 
  13. 1003        FALSE
  14. 1006        FALSE
  15. 1004        FALSE
  16. */

你可能感兴趣的:(SQL研究(MS-SQL)之一:筛选数据)