查询包含某些特定条件的数据?

[复制链接]
查看11 | 回复9 | 2011-12-28 08:44:39 | 显示全部楼层 |阅读模式
举例:
t
id valuedate
-------------------
12020070101080000
12020070102090000
13020070102100000
15020070103080000
22020070104080000
24020070104090000
25020070105080000
25020070106080000
32020070106090000
33020070107080000
34020070107090000
43020070108080000
43020070108090000
42020070109080000
45020070109090000
46020070110080000
要找出value包含且一定包含20,30的id。在上述数据中,应该是1,3。
这个查询该怎么写?
----------------------------------------------------------------------
对例子又进行了改造,就是同一个ID下的同一个VALUE值可能出现多次。
另外,又加了一列date列,表示日期。
如果还只是上面的要求的话,满足条件的将是1,3,4,但是现在加大难度了,要求20,30一定是有顺序的,就是说,同一个ID下30出现在20之前是不满足条件的。
这个查询该怎么写?
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
select distinct id from t t1
where exists
(select '1' from t t2 where t2.id=t1.id and t2.value in (20,30));
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
Select x.Id From t x ,t y Where x.Value =20 And y.Value =30 And x.Id = y.Id
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
最初由 fangjinde 发布
[B]select distinct id from t t1
where exists
(select '1' from t t2 where t2.id=t1.id and t2.value in (20,30)); [/B]

這樣得出來得結果肯定是:
id
----
1
2
3
4
改了下:
select q.id from
(select id, count(id) v from t t2
where t2.value in (20,30)
group by id
) q
where q.v=2
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
3樓正解.
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
agree 3
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
三楼的解法只能是针对当value值比较少的情况下,如果value有几十个值的话,那会是什么情形啊?


四楼的办法倒不失为一个好办法。
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
经过实际操作,我发现四楼的方法还是有点小瑕疵。
因为在现实情况下,value的值有可能重复的,所以SQL语句应该改成:
[php]
SELECT q.id
FROM (SELECT id, COUNT(distinct value) v FROM t t2 WHERE t2.VALUE IN (20, 30) GROUP BY id) q
WHERE q.v = 2;
[/php]
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
最初由 ShingU 发布
[B]经过实际操作,我发现四楼的方法还是有点小瑕疵。
因为在现实情况下,value的值有可能重复的,所以SQL语句应该改成:
[php]
SELECT q.id
FROM (SELECT id, COUNT(distinct value) v FROM t t2 WHERE t2.VALUE IN (20, 30) GROUP BY id) q
WHERE q.v = 2;
[/php] [/B]


,GOOD
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
select id from t where id not in(select id from t where value not in(20,30))
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行