具有多个WHERE条件的SELECT语句(MS-Access)

时间:2012-11-10 08:48:55

标签: sql ms-access

以下是样本数据:

c1   c2   c3   c4   c5
1    a1   a     1     1
2    a2   a     2     1
3    a3   a     3     1
4    a4   a     4     1
5    b1   b     1     1
6    b2   b     2     1
7    b3   b     3     1
8    b4   b     4     1
9    a1   c     3     1 

我想了解以下详细信息:

c1  c2  c3  c4  c5
1    a1  a   1    1
5    b1  b   1    1
9    a1  c   3    1

C1是主键,标准是任何给定的唯一(c2),其中c4是最低的,我想返回行的内容(所有5列)。

2 个答案:

答案 0 :(得分:2)

试试这个:

SELECT t1.*
FROM Table1 t1
INNER JOIN
(
  SELECT c3, MIN(c4) c4 
  FROM Table1
  GROUP BY c3
) t2 ON t1.c3 = t2.c3 ANd t1.c4 = t2.c4

SQL Fiddle Demo

更新: 1 在SQL中,返回的结果是set集(除非您指定ORDER BY子句,否则它是一个游标这种情况),其中订单不保证。这是一个标准。如果要保证特定订单,则应使用ORDER BY子句。在您的情况下,不保证像1 5 9那样订购结果。请改为添加ORDER BY c1

ORDER BY子句在某些情况下可能至关重要,例如,如果想要获得前三行或最大行,在这种情况下,您必须指定ORDER BY子句。

因此,如果您想要保留特定订单,则必须指定ORDER BY


1 正如@Fahim Parker所述,请参阅以下评论。

答案 1 :(得分:0)

select c1,c2,c3,c4,c5
from table
where c4= (select min(c4) from table as f where f.c4 = table.c4);

我希望有帮助