免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2753 | 回复: 9
打印 上一主题 下一主题

mysql多表查询的问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-12 18:10 |只看该作者 |倒序浏览
有三张表结构完全一样,我想在三张表的内容和里面查看排序的记录。我写语句是
select count(*) as num,mailto,INET_NTOA(ip)  from mail_log_200705_1 group by mailto having count(*) >1 order by num) union  (select count(*) as num,mailto,INET_NTOA(ip) from mail_log_200705_2 group by mailto having count(*) >1 ) union (select count(*) as num,mailto,INET_NTOA(ip) from mail_log_200705_3 group by mailto having count(*) >1) order by num desc limit 100

这条语句能够显示mailto中地址最多的前100名。但是只能把三张表的结果放在一起显示,里面会有重复的mailto地址。我想要三张表的结果中group by 和order by 的结果。
不知道有没有好的方法。

论坛徽章:
0
2 [报告]
发表于 2007-06-13 02:49 |只看该作者
select sum(num), mailto from (
(select count(*) as num,mailto from mail_log_200705_1 group by mailto having count(*) >1 order by num) union  (select count(*) as num,mailto from mail_log_200705_2 group by mailto having count(*) >1 ) union (select count(*) as num,mailto from mail_log_200705_3 group by mailto having count(*) >1)
) group by mailto order by num desc limit 100

论坛徽章:
0
3 [报告]
发表于 2007-06-14 09:44 |只看该作者
深水老怪,好像不行啊。
ERROR 1248 (42000): Every derived table must have its own alias

论坛徽章:
0
4 [报告]
发表于 2007-06-14 12:26 |只看该作者
没有答案吗?

论坛徽章:
0
5 [报告]
发表于 2007-06-14 13:06 |只看该作者
select sum(num), mailto from (
(select count(*) as num,mailto from mail_log_200705_1 group by mailto having count(*) >1 order by num) union  (select count(*) as num,mailto from mail_log_200705_2 group by mailto having count(*) >1 ) union (select count(*) as num,mailto from mail_log_200705_3 group by mailto having count(*) >1)
) as tt group by mailto order by num desc limit 100

as tt还是就只有tt,忘记了, 你自己试试.

论坛徽章:
0
6 [报告]
发表于 2007-06-14 15:00 |只看该作者
还是不行啊。报错同上。from后那个大括号里能当作一个表查询吗?加不加as都报那个错。

论坛徽章:
0
7 [报告]
发表于 2007-06-14 15:17 |只看该作者
和mysql版本有关系吗?我的是version: 4.1.7和4.0.20

论坛徽章:
0
8 [报告]
发表于 2007-06-14 15:34 |只看该作者
不清楚是否是mysql的版本问题, 我这里是5.1.11-beta, for Win32 (ia32)


CREATE TABLE `xx` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(32) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO `xx` (`id`, `name`) VALUES
(1, 'mike'),
(2, 'paul'),
(2, 'mike'),
(2, 'mike'),
(2, 'mike');



CREATE TABLE `yy` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(32) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO `yy` (`id`, `name`) VALUES
(1, 'john'),
(2, 'samson'),
(2, 'mike'),
(2, 'mike'),
(2, 'mike'),
(2, 'john'),
(2, 'john'),
(2, 'john');

select sum(num) as snum, name from (select count(*) as num, name from xx group by name union select count(*) as num, name from yy group by name) as tt group by name order by snum asc limit 100;

论坛徽章:
0
9 [报告]
发表于 2007-06-14 15:37 |只看该作者
???

是想三张表数据混在一起,然后再排个TOP出来?

论坛徽章:
0
10 [报告]
发表于 2007-06-14 17:36 |只看该作者
是和版本有关系,我自己安装的mysql测试没有问题。是客户的mysql版本的问题啊。唉。真是无奈啊。还没哟查到version: 4.0.20到底不支持哪个语法呢。多谢老怪了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP