早教吧 育儿知识 作业答案 考试题库 百科 知识分享

accessselect语言,我的数据有2列,列A和列B,内容如下:列A列B1a1b1d2b2c2e3a3b3d4e5d说白了,A列数据从1到5,B列数据从a到e,是多对多的逻辑.现在举例说明,我想搜索“给定B列的数据a和d,找A列中

题目详情
access select语言,
我的数据有2列,列A和列B,内容如下:
列A 列B
1 a
1 b
1 d
2 b
2 c
2 e
3 a
3 b
3 d
4 e
5 d
说白了,A列数据从1到5,B列数据从a到e,是多对多的逻辑.
现在举例说明,我想搜索“给定B列的数据a和d,找A列中所有同时出现a和d的数据”.结果应该为A列的1和3,因为1可以对应B的a和d,而3也可以对应B的a和d.5只对应B的d而没有a所以不满足条件.
请问SELECT语言该如何写.需要注意的是,不一定只是根据B中的两个数据(例子中的a和d)进行搜索,而是不定个,可以为1个,也可以为5个.
▼优质解答
答案和解析
假定 列A和B来源于“表1"
SELECT A
FROM (SELECT A FROM 表1 WHERE B="a" Or B="b")
GROUP BY A
HAVING Count(A)=2;
如果B不只2个,则where B=? or B=? or b=?……有几个写几个,最后一行HAVING Count(A)=?有几个,问号处就填几.

挂号里的意思是:A中显示的是 B=a的对应号数 加上 B=b的对应号数的记录,如果既有a又有b那么相应的号数就有2条记录(如1和3),只有a或只有b相应的号数就只有1条记录(如2).按你的例子,执行(SELECT A FROM 表1 WHERE B="a" Or B="b")语句,结果会如下:
A B
1 a
1 b
2 b
3 a
3 b
GROUP BY A (按A列分组的意思,也就是说会分成号数为1,2,3,三个组),HAVING Count(A)=2(将有2条记录的号数输出,既输出1和3,满足您的要求).不是100%的准确,是因为我默认一个号数,不会出现2个相同的B值(比如你的例子1 有a,b,d,如果1 有a,b,b,d,注意重复一个b,这样结果就不准了),把()里的内容改为(SELECT DISTINCT A,B FROM 表1 WHERE B="a" Or B="b"),这样就消除了重复值,试试.