免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: Lning
打印 上一主题 下一主题

请教 搞了一天没弄出来 数据的筛选 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2008-12-26 16:23 |只看该作者

回复 #28 sunnyfun 的帖子


从您那里学到了
谢谢

论坛徽章:
0
32 [报告]
发表于 2008-12-27 22:38 |只看该作者

你这么试试:

mysql> desc tt ;
+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| CodeA | varchar(10)   | YES  |     | NULL    |       |
| CodeB | varchar(10)   | YES  |     | NULL    |       |
| vv    | decimal(10,2) | YES  |     | NULL    |       |
+-------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> select CA,CB,vv From (select if(CodeA<CodeB,CodeA,CodeB) as CA,  if(CodeA<CodeB,CodeB,CodeA) as CB , vv From tt ) A Group by CA,CB ,vv;
+------+------+-------+
| CA   | CB   | vv    |
+------+------+-------+
| b    | c    | 20.00 |
| f    | h    |  9.00 |
+------+------+-------+
2 rows in set (0.01 sec)

mysql> select * From tt ;
+-------+-------+-------+
| CodeA | CodeB | vv    |
+-------+-------+-------+
| b     | c     | 20.00 |
| c     | b     | 20.00 |
| f     | h     |  9.00 |
| h     | f     |  9.00 |
+-------+-------+-------+
4 rows in set (0.00 sec)


按照你目前给的数据是没有问题的。

但是我觉得你的要求说得不是很不清楚,例如:
x,y,12
y,x,11

出来是什么 ?
x,y,12
y,x,11
么?
在你的数据表中,有这样的数据存在么? 还是都是像你那样都挺配对的数据 ?

如果没有杂的数据,那么我觉得现在这个SQL就没有问题了。

论坛徽章:
0
33 [报告]
发表于 2008-12-27 22:49 |只看该作者

如果数据中存在 不是按照你例子中的配对的,

mysql> select * From tt where (CodeA,CodeB) not in (
    -> Select CA,CB
    -> From (select if(CodeA<CodeB,CodeA,CodeB) as CA,if(CodeA<CodeB,CodeB,CodeA) as CB,vv From tt) A
    -> Group by CA,CB ,vv
    -> Having count(*)>=2 ) and (CodeB,CodeA) not in (
    -> Select CA,CB
    -> From (select if(CodeA<CodeB,CodeA,CodeB) as CA,if(CodeA<CodeB,CodeB,CodeA) as CB,vv From tt) A
    -> Group by CA,CB ,vv
    -> Having count(*)>=2 )
    -> union
    -> select CA,CB,vv From (select if(CodeA<CodeB,CodeA,CodeB) as CA,if(CodeA<CodeB,CodeB,CodeA) as CB,vv From tt) A
    -> Group by CA,CB ,vv
    -> Having count(*)=2
    ->  ;
+-------+-------+-------+
| CodeA | CodeB | vv    |
+-------+-------+-------+
| k     | j     | 13.00 |
| j     | k     | 11.00 |
| b     | c     | 20.00 |
| f     | h     |  9.00 |
+-------+-------+-------+
4 rows in set (0.02 sec)

mysql> select * From tt ;
+-------+-------+-------+
| CodeA | CodeB | vv    |
+-------+-------+-------+
| b     | c     | 20.00 |
| c     | b     | 20.00 |
| f     | h     |  9.00 |
| h     | f     |  9.00 |
| k     | j     | 13.00 |
| j     | k     | 11.00 |
+-------+-------+-------+
6 rows in set (0.00 sec)

mysql>


你试试 ?
最好把结果告诉我。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP