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打个比方. 展开
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打个比方. 展开
4个回答
展开全部
有很多种写法的,拿出包含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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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)
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)
追问
那如果我的已知数目是无限多怎么办啊?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
取交集
select A
from table a
join (select A from table
where B=1)b
ON a.A = b.A
where a.B = 2
select A
from table a
join (select A from table
where B=1)b
ON a.A = b.A
where a.B = 2
追问
那如果我的已知数目是无限多怎么办啊?
那如果我的已知数目是无限多怎么办啊?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
union all select A from Table1 where B=2) T group by A having count(A)>1
追问
哥们.能说的在详细点吗?
我的条件个数可能无限的.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询