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

问题描述 投票:0回答:3

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

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

我收到以下错误:

单行子查询返回多行。

那么如何用最大ligne数显示所有出现的?

mysql sql sql-server
3个回答
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)

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
投票

更改=并使用IN运算符

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

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

© www.soinside.com 2019 - 2024. All rights reserved.