【问题标题】:SELECT statement with multiple WHERE criteria (MS-Access)具有多个 WHERE 条件的 SELECT 语句 (MS-Access)
【发布时间】:2012-11-10 08:48:54
【问题描述】:

以下是示例数据:

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 列)。

【问题讨论】:

  • What ahve you tried? - 向我们展示一些努力然后我们将很乐意参与并提供帮助...
  • 尝试多个 where 条件的子查询

标签: sql ms-access


【解决方案1】:

试试这个:

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 所指出的,请参阅下面的cmets。

【讨论】:

  • 好吧,等一下,让我告诉你,我想要在 MS-Access 中工作的代码,对不起,我一开始没有提到它
  • @aaaabbbb - 这是我的荣幸。很高兴能提供帮助。
  • 请阅读this不保证 SELECT 以任何特定顺序返回行(当然不使用 ORDER BY 子句)
  • @FahimParkar - 是的,这是真的。在 SQL 中,返回的结果是 set,其中不保证顺序。这是一个标准。如果您需要它来保证特定订单,您应该使用ORDER BY 子句。就像您使用MAX 一样。同样在这种情况下,这也是正确的,不能保证以特定顺序返回的行。如果 OP 想要保留特定顺序,他也可以使用 ORDER BY 子句。但是我对这部分的回答有什么问题。
  • 根据 OP 输入,您的答案是正确的。但我想与 OP 分享我的观点,因为输入是基于 SELECT 的。
【解决方案2】:
select c1,c2,c3,c4,c5
from table
where c4= (select min(c4) from table as f where f.c4 = table.c4);

希望对你有帮助

【讨论】:

  • 你可以说select c1,c2,c3,c4,c5而不是select *
  • 可以,但没有好坏之分。
最近更新 更多