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

8yoxcaq7  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(343)

我尝试使用子查询从一个表中选择一些数据,主要目标是选择每个id的最后一个匹配项(last lign=max nulign),因此我使用:

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

我得到以下错误:
单行子查询返回多行。
那么,如何用最大对齐数显示所有引用?

pbwdgjma

pbwdgjma1#

你也可以选择加入

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)
eqzww0vc

eqzww0vc2#

子查询返回的行数超过一行(基于groupbyid),因此需要一个in子句

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

或者你也可以用join做同样的事情

SELECT * FROM TABLE1 
INNER JOIN (SELECT DISTINCT MAX(NULIGN) max_nulign
      FROM TABLE1 GROUP BY ID) T ON T.max_nulign = TABLE1.NULIGN ;
wgxvkvu9

wgxvkvu93#

更改=并在运算符中使用

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

因为当您使用=,运算符只希望rhs上有1个值。所以如果你想给一组值,使用

相关问题