如何处理返回多个值的子查询

时间:2014-06-21 22:28:09

标签: sql sql-server

这是我的表:

+----+------+------+  
| ID | Col1 | Col2 |  
+----+------+------+  
| 11 |  156 |   48 |  
| 12 |    5 |   22 |  
| 13 |  156 |   32 |  
+----+------+------+  

我想做的是

SELECT ID FROM Table1 WHERE Col1 = (SELECT MAX(col1) FROM Table1)

但由于它将被声明,并且这是在存储过程中写入的,因此会给出错误"子查询返回的值超过1"。
如果发生此错误,我想使用11 AND 12和select Min(col2)只是那些id然后只给一个ID。

是否有可能抓住这两个ID?如果是,我该怎么做?

2 个答案:

答案 0 :(得分:3)

替代答案基本上适用于每个数据库。 (在某些情况下只使用LIMIT而不是TOP)

SELECT TOP 1 ID FROM Table1 ORDER BY Col1 DESC, Col2 ASC

答案 1 :(得分:0)

上次编辑:我注意到你的sql-server标签。然而,这将适用于postgre :(

这将为您提供您正在寻找的确切答案。

SELECT DISTINCT ON (Col1) ID 
  FROM Table1 
  WHERE Col1 = (SELECT MAX(col1) FROM Table1) 
  ORDER BY Col2 ASC