表A:存的数据如下
sbNo STime ETime
101 2010-02-02 2010-02-03
101 2010-02-04 2010-02-04
101 2010-02-05 2010-02-06
102 2010-02-02 2010-02-04
103 2010-05-06 2010-05-06表B:存的数据如下:
cdid adress name value
101 东风路 传感器 2
101 东风路 传感器 5
102 平原路 温度 1
102 平原路 温度 3
103 云景里 甲烷 4其中:sbNo 和cdid 是关联的
如何设计一个MySQL语句,使得查出来的数据如下:
sbNo STime ETime adress name
101 2010-02-02 2010-02-03 东风路 传感器
101 2010-02-04 2010-02-04 东风路 传感器
101 2010-02-05 2010-02-06 东风路 传感器
102 2010-02-02 2010-02-04 平原路 温度
103 2010-05-06 2010-05-06 云景里 甲烷就是主要以表A的数据为主,只是将表B的adress 和name 字段加在后面,通过 sbNO和cdid匹配。大哥帮帮忙啊!小弟菜鸟。。谢谢啦
sbNo STime ETime
101 2010-02-02 2010-02-03
101 2010-02-04 2010-02-04
101 2010-02-05 2010-02-06
102 2010-02-02 2010-02-04
103 2010-05-06 2010-05-06表B:存的数据如下:
cdid adress name value
101 东风路 传感器 2
101 东风路 传感器 5
102 平原路 温度 1
102 平原路 温度 3
103 云景里 甲烷 4其中:sbNo 和cdid 是关联的
如何设计一个MySQL语句,使得查出来的数据如下:
sbNo STime ETime adress name
101 2010-02-02 2010-02-03 东风路 传感器
101 2010-02-04 2010-02-04 东风路 传感器
101 2010-02-05 2010-02-06 东风路 传感器
102 2010-02-02 2010-02-04 平原路 温度
103 2010-05-06 2010-05-06 云景里 甲烷就是主要以表A的数据为主,只是将表B的adress 和name 字段加在后面,通过 sbNO和cdid匹配。大哥帮帮忙啊!小弟菜鸟。。谢谢啦
a.*,b.adress,b.name
from
a inner join b
on
a.sbno=b.cdid
from a , b
where a.sbNo = b.cdid
order by a.sbNo , a.STime
sbNO fTime
101 2010-02-03
102 -------
103 --------
表B
cdid adress
101 aaaaa
101 aaaaa
102 bbbbb
102 bbbbb
103 ccccc
103 ccccc查询来这样的效果:
sbNo fTime adress
101 2010-02-03 aaaaa
102 -------- bbbbb
103 -------- ccccc
from a , b
where a.sbNo = b.cdid
order by a.sbNo , a.STime
from a , b t where a.sbno = t.cdid and not exists(select 1 from b where cdid = t.cdid and value < t.value)
这句是什么意思啊?B表的value没用的啊,不需要这个数据,
+------+------------+------------+--------+--------+
| sbNo | STime | ETime | adress | name |
+------+------------+------------+--------+--------+
| 101 | 2010-02-02 | 2010-02-03 | 东风路 | 传感器 |
| 101 | 2010-02-04 | 2010-02-04 | 东风路 | 传感器 |
| 101 | 2010-02-05 | 2010-02-06 | 东风路 | 传感器 |
| 102 | 2010-02-02 | 2010-02-04 | 平原路 | 温度 |
| 103 | 2010-05-06 | 2010-05-06 | 云景里 | 甲烷 |
+------+------------+------------+--------+--------+
5 rows in set (0.00 sec)
select a.* , max(t.adress) adress,max(t.name) name
from a , b t where a.sbno = t.cdid
group by a.sbno,a.stime,a.etime--方法二。
select a.* , t.adress,t.name
from a , b t where a.sbno = t.cdid and not exists(select 1 from b where cdid = t.cdid and value < t.value)
再问一句哈:如果我想加个判断,就是查询时间 fTime在某个范围的数据时,上面的语句怎么改啊?
mysql> select a.*,b.adress,b.name from a left join b on a.sbno=b.cdid group by sbno,stime如果想加句: where cast(fTim as char(10))>='2010-02-03' 这样能行么?
好像不可以加在 on的后面吧?
-> ;
+------+------------+------------+--------+--------+
| sbNo | STime | ETime | adress | name |
+------+------------+------------+--------+--------+
| 101 | 2010-02-04 | 2010-02-04 | 东风路 | 传感器 |
| 101 | 2010-02-05 | 2010-02-06 | 东风路 | 传感器 |
| 103 | 2010-05-06 | 2010-05-06 | 云景里 | 甲烷 |
+------+------------+------------+--------+--------+
3 rows in set (0.00 sec)