2017-02-21 84 views
-2

我有3个表格我想加入。 VM,DS和TPMySql加入3个表格,其中两个表格加入,然后是第三个表格

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并打印到:

`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小时。

正在尝试做什么?

+0

您需要的结果应该是什么样子? – r0xette

+0

您的INNER JOIN将结果从8703扩展到30,000 - 因为'vm'中的每个'datastore'在'ds'中可能有多个'DatastoreName'。你尝试过'GROUP BY ds.DatastoreName'吗? – Fredster

+0

请参阅http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-查询 – Strawberry

回答

0

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

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