日期:2014-05-17  浏览次数:20471 次

求一sql语句,大家来帮忙
一个表Test
A    B
1   001
1   002
2   011
2   003

第一步:查出B列数据开头两个字符为“00”的数据

查完应该是:
A    B
1   001
1   002
2   003

第二步:将查出的数据与原来的表进行比较,若A列每个值相同数据的个数与第一步查出来的相同则显示出来(因为在第一步中Test表中低三行被筛选掉了,与原来的数据量不符合,所以第二步后就查不出来)

结果应该是:

A    B
1   001
1   002
SQL

------解决方案--------------------
SELECT * FROM TEST A
WHERE B LIKE '00%'
AND NOT EXISTS (
SELECT 1
FROM TEST B
WHERE B.A = A.A
AND NOT (B.B LIKE '00%')
)

逻辑是一样的

------解决方案--------------------

SELECT * FROM TEST
WHERE B LIKE '00%'
    AND A NOT IN (SELECT A FROM TEST WHERE B NOT LIKE '00%')

------解决方案--------------------
select  a,b from test where B like '00%' 
 and test.a not in(
select a from (
select a,b from test
except
select  a,b from test where B like '00%')tb1
)

------解决方案--------------------
引用:
SELECT * FROM TEST WHERE B LIKE '00%'    AND A NOT IN (SELECT A FROM TEST WHERE B NOT LIKE '00%')

这个题目要换个思路来思考,在第一步:查出B列数据开头两个字符为“00”的数据时,有一部分B列数据不符合要求,A列值相同数据的个数减少,就不可能出现相同个数。



------解决方案--------------------
select * from test where A IN (
select A from test where left(b,2)='00' group by A having count(*)>1)

不知道符合楼主的意思不
------解决方案--------------------
select * from test where A in
(select A from test where b link '00%' 
   group by a 
   having count(*)>1
)
------解决方案--------------------
引用:
SELECT * FROM TEST A
WHERE B LIKE '00%'
AND NOT EXISTS (
SELECT 1
FROM TEST B
WHERE B.A = A.A
AND NOT (B.B LIKE '00%')
)

逻辑是一样的

好想法。