SQL 查询问题.树状结构数据.逆向查询.

我有个表拥有A列和B列,并拥有数据.AB010203111222233132..............这样的数据.也就说.一张表描述一个一对多关系.类似于数状结构.现在... 我有个表拥有A列和B列,并拥有数据.
A B
0 1
0 2
0 3
1 1
1 2
2 2
2 3
3 1
3 2
. .
............

这样的数据.
也就说.一张表描述一个一对多关系.类似于数状结构.

现在已知B列中的数据 1 和 2

要查询出所有包含 1 并且包含 2的所有的A.
比如说
A列等于0的时候, B列中有1同时也有2.那么这个0就应该被查询出来.

不能是只要B列包含1 或者包含2就把A查出来.这样是不行的.

求高手写出SQL语句.告诉我为什么.谢谢.
上面的查询条件只是一个假设.现在查询条件个数不确定.值也不固定.我只是拿1和2打个比方.
展开
 我来答
flyingFish211
2011-03-08 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.5万
采纳率:50%
帮助的人:1.1亿
展开全部
有很多种写法的,拿出包含1得,然后判断是否存在2
SELECT DISTINCT A
FROM TAB t1
WHERE B = '1' AND EXISTS (SELECT 1 FROM TAB WHERE A = t1.A and B = '2')

2)拿出1得,2得各自纪录,然后连接
SELECT t1.A
FROM (SELECT DISTINCT A FROM TAB WHERE B = '1') t1,
(SELECT DISTINCT A FROM TAB WHERE B = '2') t2
WHERE t1.A = t2.A

3)拿出1, 2 然后数个数
SELECT A
FROM TAB
WHERE B IN ('1', '2')
GROUP BY A
HAVING COUNT(DISTINCT B) >= 2
追问
那如果我的已知数目是无限多怎么办啊?
追答
那就用第三种,in里面用你得无限多条目来替代(估计你是子查询)。后面的count()>=2那里2换成你无限多的数目
SELECT A
FROM TAB
WHERE B IN ('1', '2')
GROUP BY A
HAVING COUNT(DISTINCT B) >= 2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
牧之卉0j1
2011-03-08 · TA获得超过1151个赞
知道大有可为答主
回答量:1689
采纳率:0%
帮助的人:1745万
展开全部
SELECT T.* FROM TB T
WHERE
EXISTS(SELECT 1 FROM TB WHERE A=T.A AND B=1)
AND
EXISTS(SELECT 1 FROM TB WHERE A=T.A AND B=2)
追问
那如果我的已知数目是无限多怎么办啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kulin_sz
2011-03-08 · 超过18用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:0
展开全部
取交集
select A
from table a
join (select A from table
where B=1)b
ON a.A = b.A
where a.B = 2
追问
那如果我的已知数目是无限多怎么办啊?
那如果我的已知数目是无限多怎么办啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
miniappA13o8pWx0iBrT
2011-03-08 · TA获得超过219个赞
知道小有建树答主
回答量:235
采纳率:0%
帮助的人:212万
展开全部
select A from (select A from Table1 where B=1
union all select A from Table1 where B=2) T group by A having count(A)>1
追问
哥们.能说的在详细点吗?
我的条件个数可能无限的.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式