从一个表中选择:单行子查询返回多行

时间:2018-01-02 11:07:07

标签: mysql sql sql-server

我正在尝试使用子查询从一个表中选择一些数据,主要目标是选择每个ID的最后一个出现(最后一个ligne =最大NULIGN),所以我使用了:

SELECT * FROM TABLE1 WHERE NULIGN= (SELECT DISTINCT MAX(NULIGN) FROM TABLE1 GROUP BY ID);

我收到以下错误:

  

单行子查询返回多行。

那么如何用max ligne数字显示所有出现的事件?

3 个答案:

答案 0 :(得分:1)

您的子查询返回多行(基于ID的组),因此您需要一个IN子句

SELECT * FROM TABLE1 WHERE NULIGN IN  (
    SELECT DISTINCT MAX(NULIGN) 
    FROM TABLE1 GROUP BY ID);

或者你可以用连接

做同样的事情
SELECT * FROM TABLE1 
INNER JOIN (SELECT DISTINCT MAX(NULIGN) max_nulign
      FROM TABLE1 GROUP BY ID) T ON T.max_nulign = TABLE1.NULIGN ;

答案 1 :(得分:1)

更改=并使用IN运算符

SELECT * FROM TABLE1 WHERE NULIGN IN (SELECT DISTINCT MAX(NULIGN) FROM TABLE1 GROUP BY ID);

因为当你使用=时,运营商期望在RHS上只有1个值。因此,如果要提供一组值,请使用IN

答案 2 :(得分:1)

作为替代方案,您可以使用join

SELECT a.* 
FROM TABLE1 a
JOIN( SELECT ID,MAX(NULIGN) MAX_NULIGN
      FROM TABLE1 
      GROUP BY ID
) b
ON a.ID = b.ID
AND a.NULIGN= b.MAX_NULIGN;

或者将您的子查询作为相关子查询

SELECT *
FROM TABLE1 a
WHERE a.NULIGN= (SELECT MAX(NULIGN) 
                 FROM TABLE1 
                WHERE ID = a.ID)