MySQL多子查询

时间:2013-06-27 11:20:43

标签: mysql sql subquery

我想查询这样的内容:

SELECT id 
FROM reparacoes 
WHERE edit_data= (select max(edit_data) 
                  from reparacoes 
                  where id_reparacao= (select id_reparacao from reparacoes));

但是子查询select id_reparacao from reparacoes返回的行数超过1行(如预期的那样)并且查询不起作用。我应该用joins执行此操作吗?如果有,怎么样?

所以这是它的工作原理:每当我编辑一个“遣返”行(在我的网站上)时,我INSERT一个新的(我不UPDATE)并创建一个新的ID以及edit_data(编辑的日期时间),但id_reparacoes保持不变。

我想要一个返回来自repracoes的ID的查询,其中edit_data是给定id_reparacao中最新的。但我有一个以上的id_reparacao,我希望这个查询所有id_reparacao(这就是为什么我尝试...where id_reparacao= (select id_reparacao from reparacoes)

PS:对不起,我知道这已经被多次质疑/回答了,但我找不到任何可以帮助我的事情。

5 个答案:

答案 0 :(得分:3)

我想你想要这样的东西:

SELECT  rep.ID
FROM    reparacoes rep
        INNER JOIN
        (   SELECT  id_reparacao, MAX(Edit_Data) AS Edit_Data
            FROM    reparacoes
            GROUP  BY id_reparacao
        ) MaxRep
            ON MaxRep.id_reparacao = rep.id_reparacao
            AND MaxRep.Edit_Data = rep.Edit_Data;

子查询只是获得每edit_data的最后一个id_reparacao,然后通过执行INNER JOIN返回到表,您将行限制为仅Edit_data匹配的行最新的每id_reparacao

答案 1 :(得分:0)

如果内部查询返回多行,请使用in代替=

SELECT id 
FROM reparacoes 
WHERE edit_data in 
        (select max(edit_data) 
         from reparacoes 
         where id_reparacao in
                 (select id_reparacao from reparacoes)
        );

答案 2 :(得分:0)

我不确定我是否完全理解您希望查询返回的内容。如果你用文字描述你的目标,这可能有所帮助。

如果您想获取每个不同id_reparacao的最大编辑数据的ID,请尝试以下操作:

SELECT id 
FROM reparacoes outerquery
WHERE edit_data = (SELECT max(edit_data) 
                   FROM reparacoes innerquery
                   WHERE innerquery.id_reparacao = outerquery.id_reparacao)

答案 3 :(得分:0)

我猜你想要的是这个:

SELECT id
 FROM reparacoes
 WHERE edit_data = (
   SELECT max(edit_data)
   FROM reparacoes
);

答案 4 :(得分:-1)

如果要比较单列数据,请使用以下查询:

SELECT id FROM reparacoes WHERE edit_data= (select max(edit_data) from reparacoes);

如果要从多个记录进行比较,请使用以下查询:

SELECT id FROM reparacoes WHERE edit_data IN (select edit_data from reparacoes);