整个问题是由于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上实现这个目标?
答案 0 :(得分: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
答案 1 :(得分:0)
也许使用连接它会工作(未经测试我无法访问3.23。) 理论:从IDtable1中获取表2中的max 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