MySql加入3个表,其中两个表连接,然后是第三个表

时间:2017-02-21 21:40:41

标签: mysql inner-join

我想加入3张桌子。 vm,ds和tp

vm与ds连接 ds与tp

连接

我只想与下面的原始查询匹配,返回8703并返回其他表中的一行,所以我最终得到了8703行。

`SELECT *
FROM vm 
WHERE date = (SELECT max(date) from vm)`

这会按预期返回8703个结果。

然后我想使用上面的表并将其与另一个表连接以检索更多值。

加入第二个查询

`SELECT *
FROM ds 
WHERE date = (SELECT max(date) from ds)`

我想加入以上两个:

INNER JOIN ds ON vm.datastore = ds.DatastoreName

加入的第三个查询

`SELECT *
FROM tp 
WHERE date = (SELECT max(date) from tp)`

我想加入表ds和tp:

`INNER JOIN tp ON ds.uid = tp.uid`

我尝试了以下但是它返回30,000千行,我只想要上面的8703。

完整查询:

`SELECT *
FROM vm 
INNER JOIN ds ON vm.datastore = ds.DatastoreName
INNER JOIN tp ON ds.uid = tp.uid
WHERE vm.date = (SELECT MAX(date) from vm)
AND ds.date = (SELECT MAX(date) from ds)
AND tp.date = (SELECT MAX(date) from tp)`

在过去的8小时里,我也尝试了上述的许多版本。

我正在尝试做什么?

1 个答案:

答案 0 :(得分:0)

您的INNER JOIN正在扩展结果 - 从8703扩展到30,000 - 因为在vm中每个数据存储可能有多个ds中的DatastoreName。

您是否尝试过GROUP BY vm.id?