请教一个sql的写法(本地无法测试,所以上来问问) 本帖最后由 lifeixie 于 2011-01-06 17:41:47 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 SELECT A.number ,COUNT(B.*) FROM fonoirs_changenumber A INNER JOIN cdr B ON INSTR(B.userfield,A.number)>0 GROUP BY A.number SELECT A.number ,IFNULL(COUNT(B.*),0) FROM fonoirs_changenumber A LEFT JOIN cdr B ON INSTR(B.userfield,A.number)>0 GROUP BY A.number SELECT A.number,COUNT(B.userfield) FROM fonoirs_changenumber A LEFT JOIN cdr B ON INSTR(B.userfield,A.number)>0 GROUP BY A.number mysql> select * from cdr;+-----------+| userfield |+-----------+| aaa-1333 || aaa-1333 || aaa-1333 || aaa-1444 || aaa-1444 || aaa-1555 || aaa-1666 || aaa-1666 |+-----------+8 rows in set (0.00 sec)mysql> select * from fonoirs_changenumber;+--------+| number |+--------+| 1333 || 1444 || 1555 || 1666 || 1777 |+--------+5 rows in set (0.00 sec)mysql> select number,sum(if(locate(f.number,c.userfield)>0,1,0)) from fonoirs_changenumber f left join cdr c -> on locate(f.number,c.userfield) >0 -> group by number;+--------+---------------------------------------------+| number | sum(if(locate(f.number,c.userfield)>0,1,0)) |+--------+---------------------------------------------+| 1333 | 3 || 1444 | 2 || 1555 | 1 || 1666 | 2 || 1777 | 0 |+--------+---------------------------------------------+5 rows in set (0.00 sec)mysql> select number,sum(if(locate(f.number,c.userfield)>0,1,0)) as cunt from fonoirs_changenumber f left join cdr c -> on locate(f.number,c.userfield) >0 -> group by number;+--------+------+| number | cunt |+--------+------+| 1333 | 3 || 1444 | 2 || 1555 | 1 || 1666 | 2 || 1777 | 0 |+--------+------+5 rows in set (0.00 sec) mysql> SELECT A.number,COUNT(B.userfield) FROM -> fonoirs_changenumber A LEFT JOIN cdr B ON INSTR(B.userfield,A.number)>0 -> GROUP BY A.number;+--------+--------------------+| number | COUNT(B.userfield) |+--------+--------------------+| 1333 | 3 || 1444 | 2 || 1555 | 1 || 1666 | 2 || 1777 | 0 |+--------+--------------------+5 rows in set (0.00 sec) 一个关于KEY的疑问 一个非常诡异的现象,字段被谁吞了? 如何加密MYSQL触发器和存储过程 一个产品记录对应多个产品类别,只两个表能实现么 请教两表数据相加问题 怎样用SQL语句批量修改字符串中指定位置的字符 MYSQL复制的问题 很简单的问题,但我不会 怎样从mysql中随机提取一条记录? 两表查询的SQL问题 求sql实现方法 mysql 存储过程 执行报错,怎么回事?
fonoirs_changenumber A INNER JOIN cdr B ON INSTR(B.userfield,A.number)>0 GROUP BY A.number
fonoirs_changenumber A LEFT JOIN cdr B ON INSTR(B.userfield,A.number)>0 GROUP BY A.number
fonoirs_changenumber A LEFT JOIN cdr B ON INSTR(B.userfield,A.number)>0
GROUP BY A.number
+-----------+
| userfield |
+-----------+
| aaa-1333 |
| aaa-1333 |
| aaa-1333 |
| aaa-1444 |
| aaa-1444 |
| aaa-1555 |
| aaa-1666 |
| aaa-1666 |
+-----------+
8 rows in set (0.00 sec)mysql> select * from fonoirs_changenumber;
+--------+
| number |
+--------+
| 1333 |
| 1444 |
| 1555 |
| 1666 |
| 1777 |
+--------+
5 rows in set (0.00 sec)mysql> select number,sum(if(locate(f.number,c.userfield)>0,1,0)) from fonoirs_ch
angenumber f left join cdr c
-> on locate(f.number,c.userfield) >0
-> group by number;
+--------+---------------------------------------------+
| number | sum(if(locate(f.number,c.userfield)>0,1,0)) |
+--------+---------------------------------------------+
| 1333 | 3 |
| 1444 | 2 |
| 1555 | 1 |
| 1666 | 2 |
| 1777 | 0 |
+--------+---------------------------------------------+
5 rows in set (0.00 sec)mysql> select number,sum(if(locate(f.number,c.userfield)>0,1,0)) as cunt from fonoirs_changenumber f left join cdr c
-> on locate(f.number,c.userfield) >0
-> group by number;
+--------+------+
| number | cunt |
+--------+------+
| 1333 | 3 |
| 1444 | 2 |
| 1555 | 1 |
| 1666 | 2 |
| 1777 | 0 |
+--------+------+
5 rows in set (0.00 sec)
-> fonoirs_changenumber A LEFT JOIN cdr B ON INSTR(B.userfield,A.number)>0 -> GROUP BY A.number;
+--------+--------------------+
| number | COUNT(B.userfield) |
+--------+--------------------+
| 1333 | 3 |
| 1444 | 2 |
| 1555 | 1 |
| 1666 | 2 |
| 1777 | 0 |
+--------+--------------------+
5 rows in set (0.00 sec)