Mysql 复杂双表联接
尝试创建一个结果集,该结果集的每个Mysql 复杂双表联接,mysql,sql,Mysql,Sql,尝试创建一个结果集,该结果集的每个Sensorrule行最多有一行,其中Sensorrule.sensorid存在于Sensordata.sensorid中,其中日期(Sensor.messagedate)=CURDATE()时间(Sensordata.messagedate)=>Sensorrule.fromtime和时间(Sensordata.messagedate)=>Sensorrule.totime Sensorrule +-------------+--------------+--
Sensorrule
行最多有一行,其中Sensorrule.sensorid
存在于Sensordata.sensorid
中,其中日期(Sensor.messagedate)=CURDATE()
时间(Sensordata.messagedate)=>Sensorrule.fromtime和时间(Sensordata.messagedate)=>Sensorrule.totime
Sensorrule
+-------------+--------------+------------+-------+--------------+
| sensorid | fromtime | totime | msg | name |
+-------------+--------------+------------+-------+--------------+
| 27460 | 5:00 | 11:00 | Work | Bob |
| 27461 | 4:00 | 15:00 | Not | Susan |
| 27460 | 7:30 | 12:00 | Max | Rick |
+-------------+--------------+------------+-------+--------------|
Sensordata
+---------+---------------------+---------------+----------+
| Room | messagedate | transactionid | sensorid|
+---------+---------------------+---------------+----------+
| Bedroom | 2014-05-30 07:48:14 | 332243181 | 27460 |
| Bedroom | 2014-05-30 05:48:14 | 332243182 | 27464 |
| Bedroom | 2014-05-22 07:36:21 | 332243183 | 27460 |
| Bedroom | 2014-05-22 09:23:21 | 332656534 | 27464 |
| Bedroom | 2014-05-21 06:34:22 | 332243185 | 27461 |
| Bedroom | 2014-05-20 06:15:06 | 332243187 | 27460 |
| Bedroom | 2014-05-20 07:40:34 | 332243172 | 27465 |
| Bedroom | 2014-05-19 09:27:56 | 332243191 | 27461 |
| Bedroom | 2014-05-18 06:34:08 | 332243101 | 27460 |
+---------+---------------------+---------------+----------+
如果Sensordata
中没有当前日期(messagedate
)在fromtime
和totime
之间的messagedate
时间的行,则结果集可能小于Sensorrule
中的行数
Sensorrule
+-------------+--------------+------------+-------+--------------+
| sensorid | fromtime | totime | msg | name |
+-------------+--------------+------------+-------+--------------+
| 27460 | 5:00 | 11:00 | Work | Bob |
| 27461 | 4:00 | 15:00 | Not | Susan |
| 27460 | 7:30 | 12:00 | Max | Rick |
+-------------+--------------+------------+-------+--------------|
Sensordata
+---------+---------------------+---------------+----------+
| Room | messagedate | transactionid | sensorid|
+---------+---------------------+---------------+----------+
| Bedroom | 2014-05-30 07:48:14 | 332243181 | 27460 |
| Bedroom | 2014-05-30 05:48:14 | 332243182 | 27464 |
| Bedroom | 2014-05-22 07:36:21 | 332243183 | 27460 |
| Bedroom | 2014-05-22 09:23:21 | 332656534 | 27464 |
| Bedroom | 2014-05-21 06:34:22 | 332243185 | 27461 |
| Bedroom | 2014-05-20 06:15:06 | 332243187 | 27460 |
| Bedroom | 2014-05-20 07:40:34 | 332243172 | 27465 |
| Bedroom | 2014-05-19 09:27:56 | 332243191 | 27461 |
| Bedroom | 2014-05-18 06:34:08 | 332243101 | 27460 |
+---------+---------------------+---------------+----------+
希望结果集看起来像:
Sensorid msg name
24760 Work Bob
27461 Not Susan
注:上述数据集并未具体产生上述结果从传感器规则s、传感器数据d中选择不同的s.sensorid、s.msg、s.name
select distinct s.sensorid,s.msg,s.name from sensorrule s,sensordata d
where s.sensorid=d.sensorid and
time(d.messagedate)>s.fromtime and
time(d.messagedate)<s.totime;
其中s.sensorid=d.sensorid,且
时间(d.messagedate)>s.fromtime和
时间(d.messagedate)请显示表格结构并告诉我们您想要实现什么?对不起。当我按enter键时,编辑错误。您想要在结果集中显示什么?选择条件是什么?如果Sensorrule中每一行的sensorid在Sensordata表的一行或多行中找到,并且具有今天的日期(messagedate),并且messagedate中的时间介于Sensorrule的fromtime和totime之间,则输出Sensorrule的sensorid、MSG和name。如果Sensordata中至少存在一次这种情况,我只想看到Sensorrule中每行的一行输出(或无输出)。(MYSQL)错误1271(HY000):操作“>”的排序规则的非法混合在我以前的尝试中也收到了此错误消息(因此,此处请求帮助)问题在于您的表排序规则类型。请检查此项。我想我发现了问题。将s.fromtime和s.totime更改为显式日期时间格式:例如,STR_to_DATE(s.totime,“%H:%i”)允许查询工作。然而,我得到了很多结果(Sensordata中的每一行对应一个结果,而不是Sensorrule中的每一行对应一个结果。这不是只返回一个结果,而不是Sensorrule中每一行对应一个可能的结果吗?