0

整个问题是由于IN子句中的子查询似乎不适用于 mysql 3.23。

这是table1的表结构:

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

这是表2:

|**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

我无法测试此查询,但您可以尝试用 JOIN 替换 IN 子句:

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 回答
0

也许使用连接它会起作用(未经测试,我无权访问 3.23。) 理论:从按 IDtable1 分组的 Table2 中获取最大 intVersions,然后将其加入到结果中,这将过滤掉由于连接条件而导致的非最大值。

Select T1.IDTable1, T1.strDescription, T2.IDtable2, T2.idTable1, T2.intVersion
FROM Table1 T1 
INNER JOIN table2 T2 on T1.idTable1=T2.IDtable1
INNER JOIN table3 T3 on T3.idtable1 = T1.IDtable1 and T3.Intversion = t2.intVersion
(Select max(intVersion) intVersion, idtable2, idtable1 from table2 group by IDtable1) T3
GROUP BY IDtable1, strDescription, IDtable2, IdTable1
于 2013-04-17T17:12:01.313 回答