2017-02-21 136 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?