Mysql SQL在多个表上选择一个值

Mysql SQL在多个表上选择一个值,mysql,sql,join,multiple-tables,Mysql,Sql,Join,Multiple Tables,我使用6个表来测量传感器 DEVICES id imei name 1 123456789 device1 BMP085 id deviceId date time pressure altitude tempC tempF 1 1 2014-02-21 20:01:02 000.00 000.00 00.00 00.00 GPS id deviceId date time latitude longit

我使用6个表来测量传感器

DEVICES
id imei        name
1  123456789   device1

BMP085
id deviceId date        time     pressure altitude tempC tempF
1  1        2014-02-21  20:01:02 000.00   000.00   00.00 00.00

GPS
id deviceId date       time     latitude longitude timeUtc  timeFix  altitude eps   epx   epv   ept   speed climb track mode satellites
1  1        2014-02-21 20:01:02 0.000000 0.000000  00:00:00 00:00:00 0.00     0.000 0.000 0.000 0.000 0.000 0.000 0.00  0    0

HIH6130
id deviceId date       time     humidity tempC tempF
1  1        2014-02-21 20:01:02 00.00    00.00 00.00

MINIMU9V2
id deviceId date        time    heading tempC tempF xAngle yAngle zAngle xAccel yAccel zAccel xMagn  yMagn  zMagn
1  1        2014-02-21 20:01:02 000.00  00.00 00.00 00.000 00.000 00.000 00.000 00.000 00.000 00.000 00.000 00.000

RASPI
id deviceId date       time     tempC tempF
1  1        2014-02-21 20:01:02 00.00 00.00
我想选择表BMP085、GPS、HIH6130、MINIMU9V2和RASPI中设备ID=1的所有匹配数据集。应该只显示此设备的数据集。 此外,我想选择表BMP085、GPS、HIH6130、MINIMU9V2和RASPI的所有匹配数据集,这些数据集的日期=2014-02-21,时间>=20:01:00和='20:01:00'
和t2.time您确定您的数据集结果是错误的吗?当您连接许多表时,很可能会在表中重复结果,这会使您的行显示不止一次

检查时:

SELECT t1.imei, t1.name, 
       t2.date, t2.time, t2.pressure, t2.altitude, t2.tempC, t2.tempF
FROM hab_DEVICES t1
LEFT JOIN hab_BMP085 t2 ON ( t1.id = t2.deviceId AND t1.id = 1 )
WHERE   t2.date = '2014-02-21'
    AND t2.time >= '20:01:00'
    AND t2.time <= '20:01:30'
检查这把小提琴:


我假设表2中的时间是“主时间”,但您可以使用对您更有意义的任何时间。

您能用一些数据和表的描述编写一个SQLFIDLE()吗?找到解决方案会有很大帮助这是我的小提琴,已经包括了Chococroc建议的内部连接:日期是否应该以某种方式相互关联?我每15秒同时记录一次所有传感器的传感器数据,因此我想获得在特定时间点为所有传感器设置的数据集。好的,我做到了,问题是连接键:你还需要包括时间。检查答案中的更新,XDI正在使用内部联接。给定的语句提供了63个数据集。添加GPS表可提供8064个数据集。添加HIH6130表可提供1032192个数据集。除了DEVICES表之外,所有表都有一个关于id、deviceId、日期和时间的索引,其中id是主键。
SELECT t1.imei, t1.name, 
       t2.date, t2.time, t2.pressure, t2.altitude, t2.tempC, t2.tempF
FROM hab_DEVICES t1
LEFT JOIN hab_BMP085 t2 ON ( t1.id = t2.deviceId AND t1.id = 1 )
WHERE   t2.date = '2014-02-21'
    AND t2.time >= '20:01:00'
    AND t2.time <= '20:01:30'
SELECT t1.imei, t1.name, 
        t2.date, t2.time, t2.pressure, t2.altitude, t2.tempC, t2.tempF,
        t3.latitude, t3.longitude, t3.timeUtc, t3.timeFix, t3.altitude, t3.eps, t3.epx, t3.epv, t3.ept, t3.speed, t3.climb, t3.track, t3.mode, t3.satellites,
        t4.humidity, t4.tempC, t4.tempF,
        t5.heading, t5.tempC, t5.tempF, t5.xAngle, t5.yAngle, t5.zAngle, t5.xAccel, t5.yAccel, t5.zAccel, t5.xMagn, t5.yMagn, t5.zMagn,
        t6.tempC, t6.tempF
        FROM hab_DEVICES t1
INNER JOIN hab_BMP085 t2 
ON (t1.id = t2.deviceId AND t1.id = 1 )
INNER JOIN hab_GPS t3
ON (t1.id = t3.deviceId AND t2.date = t3.date AND t2.time = t3.time AND t1.id = 1)
INNER JOIN hab_HIH6130 t4
ON (t1.id = t4.deviceId AND t2.date = t4.date AND t2.time = t4.time AND t1.id = 1)
INNER JOIN hab_MINIMU9V2 t5
ON (t1.id = t5.deviceId AND t2.date = t5.date AND t2.time = t5.time AND t1.id = 1)
INNER JOIN hab_RASPI t6
ON (t1.id = t6.deviceId AND t2.date = t6.date AND t2.time = t6.time AND t1.id = 1)  
WHERE t2.date = '2014-02-21'
AND t2.time >= '20:01:00'
AND t2.time <= '20:01:30'