2017-02-21 23 views
-2

3つのテーブルがあります。 VMは、DSとTPMySql Join 3 2つのテーブルが結合されたテーブルとその後に3番目のテーブル

VMは、TPと結合 DS DSで合流

私はそれが8703を返すの下に元のクエリと一致し、私が終わるので、他のテーブルから単一の行を返すようにしたい

最後に8703行。

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

これは、期待どおりの8703結果を返します。

私は上記のテーブルを使用して別のテーブルと結合して、さらに値を取得したいと考えています。私はテーブルのDSに参加したい

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

に参加する

INNER JOIN ds ON vm.datastore = ds.DatastoreName

サード問合せ:

2番目のクエリ私は上記の二つの上参加したい

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

に参加しますtp:

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

私は以下を試しましたが、30,000,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に複数のDatastoreNameが存在するためです。

GROUP BY vm.idを試しましたか?

関連する問題