【问题标题】:SQL filtering records by unique column using WHERE clause onlySQL 仅使用 WHERE 子句按唯一列过滤记录
【发布时间】:2016-03-13 12:57:35
【问题描述】:

我正在尝试仅使用 SQL 语句的 WHERE 子句过滤表以仅显示列的不同值。

下面是一个示例表:

Person ID  |  Name  |  City  
----------------------------
    1       person1   city1
    2       person2   city1      
    3       person3   city2
    4       person4   city3
    5       person5   city1

我想得到如下输出的不同城市:

City
----
city1
city2
city3

但是,我的应用程序限制我只能指定 WHERE 子句。 所以我被允许的基本格式是这样的:

select city from table1 where __________;

更新:我也尝试过,发现 SELECT 语句占用所有列 (*) 而不是单列,所以我不能使用:

select * from table1 where 1=1 group by city;

【问题讨论】:

  • 无法使用 WHERE 获得不同的值。如果应用程序编码错误并允许 SQL 注入,您可以尝试 WHERE 1=1 GROUP BY city
  • 是否也可以在那里实现 group by 子句? -> 其中 1=1 按城市分组
  • select distinct city from table1 您的应用是否也限制了 DISTINCT 关键字?
  • @Mihai 再次阅读问题..

标签: sql sql-server


【解决方案1】:

这在where 子句中会产生预期的效果。

PersonId IN (SELECT MAX(PersonId) FROM table1 GROUP BY city)

【讨论】:

    【解决方案2】:

    应该这样做:

    select * 
    from table1 
    where 
        PersonID IN
        (
            SELECT MIN(PersonID) AS MinID
            FROM table1
            GROUP BY City
        )
    

    【讨论】:

      【解决方案3】:

      SQL 提供了关键字“DISTINCT”来仅显示列的不同值。这是一种直接的方式,不需要使用 WHERE 子句。另一种情况是您可以使用 GROUP BY 子句和 WHERE 子句来获取不同的值,例如: select city from table1 where 1=1 group by city;

      【讨论】:

      • DISTINCT 基于所有选定的列进行重复数据删除,而不是单个列!参见例如>>> 如果指定了 DISTINCT 关键字,则查询会根据 SELECT 子句中的列删除重复的行 docs.aws.amazon.com/kinesisanalytics/latest/sqlref/…
      猜你喜欢
      • 1970-01-01
      • 2020-06-11
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 2015-04-18
      • 2016-07-02
      相关资源
      最近更新 更多