0

全体の問題は、IN句内のサブクエリが mysql 3.23 で機能しないように見えるという事実によるものです。

table1 のテーブル構造は次のとおりです。

|**idTable1**|**strDescription**|
|1           |blablabla         |
|2           |blablabla         |

ここにtable2があります:

|**idTable2**|**idTable1**|**intVersion**|
|1           |1           |1             |
|2           |1           |8             |
|3           |2           |2             |
|4           |2           |3             |

私が達成しようとしているもの:

説明を取得するためだけに両方のテーブルを結合しますが、次のように最大のバージョンを持つ各行の 1 つのレコードのみが必要です。

|**idTable1**|**strDescription**|**idTable2**|**idTable1**|**intVersion**|
|1           |blablabla         |2           |1           |8             |
|2           |blablabla         |4           |2           |3             |

これが私が思いついたものです:

SELECT table1.idTable1, strDescription, intVersion FROM table1 
INNER JOIN table2 ON table1.idTable1 = table2.idTable1 
WHERE (table1.idTable1, intVersion)
IN (SELECT idTable1, MAX(intVersion) FROM table2 GROUP BY idTable1)

このクエリを 2 つの異なるバージョンの mysql でテストしました。これが必要なのは 3.23 で、このクエリが機能するのは 5.5 です。

3.23でこれを達成する方法はありますか?

4

2 に答える 2

0

このクエリはテストできませんでしたが、IN 句を JOIN に置き換えることはできます。

SELECT
  table1.idTable1, table1.strDescription, table2.intVersion
FROM
  table1 INNER JOIN table2
  ON table1.idTable1 = table2.idTable1 INNER JOIN
  (SELECT idTable1, MAX(intVersion) maxVersion FROM table2 GROUP BY idTable1) mx
  ON table1.idTable1=mx.idTable1 AND table2.intVersion=mx.maxVersion
于 2013-04-17T17:11:47.400 に答える