我正在尝试使用子查询从一个表中选择一些数据,主要目标是选择每个ID的最后一个出现(最后一个ligne =最大NULIGN),所以我使用了:
SELECT * FROM TABLE1 WHERE NULIGN= (SELECT DISTINCT MAX(NULIGN) FROM TABLE1 GROUP BY ID);
我收到以下错误:
单行子查询返回多行。
那么如何用max ligne数字显示所有出现的事件?
答案 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)