【问题标题】:How to create a select query that selects a repeating value in one of colums only once from multiple rows(example inside)如何创建一个选择查询,该查询仅从多行中选择一列中的重复值一次(内部示例)
【发布时间】:2016-07-28 21:29:36
【问题描述】:

这就是我所拥有的(这是从不同表中通过不同条件进行选择查询的结果,我们称之为 Select 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

编辑:好吧,我将保持打开状态,但最后我选择了数据结构方式而不是查询方式。

【问题讨论】:

    标签: sql asp.net database ms-access


    【解决方案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
    

    这将在一组相同的c2 值中选择具有最小ID 值的行。您可以使用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
    

    【讨论】:

    • 我不明白另一个表的使用,我有一个选择查询,我想对已经有来自不同表的术语的选择查询的产品执行我所说的。
    • @user3575645 您可以使用选择查询来生成派生表并使用它来代替mytable
    • 那么 t1 和 t2 代表哪些表呢?对于愚蠢的问题,我对查询的了解很少,很抱歉,感谢您的帮助。
    • @user3575645 您必须将select 查询替换为mytable,即使用两次,例如SELECT t1.* FROM (SELECT ... query here ) AS t1 ...
    • 是的,我明白要输入什么,但 t1 和 t2 代表什么?他们是哪两张桌子?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2020-10-25
    • 1970-01-01
    • 2012-12-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多