如何创建一个选择查询,从多个行中仅选择一个colums中的重复值(示例内部)

时间:2016-04-07 19:40:16

标签: sql asp.net database ms-access

这就是我所拥有的(这是不同条件下来自不同表格的选择查询的结果,让我们称之为选择X):

ID c2 c3 c4 

1  A  de ys

2  A  rq pm

3  B  rq qs

我想要一个只能在c2中给出一个具有特定值的行的查询,例如:

ID c2 c3 c4 

1  A  de ys

3  B  rq qs

ID c2 c3 c4 

2  A  rq pm

3  B  rq qs

我知道如何使用数据结构,但它更复杂,我想知道是否有办法使用查询?

编辑:这是我尝试的,它给出了错误:" From子句中的语法错误" (如果重要X = SELECT Responses.ID,Responses.PostID,Responses.Responding,Posts.ID,Posts.UserID,Users.ID,Users.Username FROM Responses,Posts,Users WHERE Responses.PostID =3 and Posts.ID = Responses.PostID AND Responses.Responding = Users.ID

    SELECT(Select X).*
FROM (Select X) as (Select X)
JOIN (
  SELECT MIN(ID) AS ID, Users.ID
  FROM (Select X)
  GROUP BY Users.ID
) AS t2 ON (Select X).ID = t2.ID

编辑:好吧,我将这个开放,但最后我选择的数据结构方式不是查询方式。

1 个答案:

答案 0 :(得分:1)

这样的事情:

SELECT t1.*
FROM mytable as t1
JOIN (
  SELECT MIN(ID) AS ID, c2
  FROM mytable 
  GROUP BY c2
) AS t2 ON t1.ID = t2.ID

这将选择具有相同ID值组中的最小c2值的行。您可以使用MAX聚合函数来获取第二个结果集。

注意:我假设ID是你桌子的PK。

修改

您可以使用SELECT查询中的派生表,如下所示:

SELECT t1.*
FROM (SELECT X ...) as t1
JOIN (
  SELECT MIN(ID) AS ID, c2
  FROM (SELECT X ...) AS t
  GROUP BY c2
) AS t2 ON t1.ID = t2.ID