我想一起加入4张桌子。一个表来自数据库A,而另外三个表来自数据库B.当我运行以下查询时,计算机只是保持加载,没有错误或结果。我的疑问是:
SELECT tableA.ts, tableA.voltage, tableB.Day0, tableC.Day0, tableD.Day0 FROM databaseA.tableA \
-> INNER JOIN databaseB.tableB ON tableB.ts \
-> INNER JOIN databaseB.tableC ON tableC.ts \
-> INNER JOIN databaseB.tableD ON tableD.ts\
-> BETWEEN tableA.ts - INTERVAL 50 SECOND AND tableA.ts + INTERVAL 50 SECOND
由于我对SQL很陌生,我想询问我的查询设计是否有意义,以及是否有任何问题可能导致查询问题,即(不间断加载)。
当前查询的复杂性来自于需要从多个数据库中将多个表连接在一起。这些表需要加入的通用性将在ts(时间戳)。我在上面的查询设计中添加了BETWEEN tableA.ts - INTERVAL 50 SECOND AND tableA.ts + INTERVAL 50 SECOND
,因为表之间的时间戳可能会关闭几秒钟。
答案 0 :(得分:0)
评论时间有点长。
您的ON
条件不正确。你在桌子之间做笛卡尔积。
ON
条件应该是两个(或可能更多)表之间的布尔比较。所以,你的表达式应该如下:
ON tableB.ts = . . .
(平等将是正常运营商。)
MySQL会将其他类型转换为布尔值。对于数字,0被视为" false"其他一切都是"真的" (NULL
s是NULL
s。。
所以:
ON tableB.ts
是可以接受的。但它实际上只是测试:
ON tableB.ts <> 0