【问题标题】:SQL - getting a specific value from a row and then using that valueSQL - 从行中获取特定值,然后使用该值
【发布时间】:2012-10-24 21:14:32
【问题描述】:

我有一个包含名称、成绩和分数的数据表。例如,“约翰”获得了 B 级,其分值为 3.0。

如何选择低于“B”级的条目?

所以我需要做这样的事情

Value = select Point from MyTable where Grade="B"

然后

select * from MyTable where Point < value

但显然 SQL 必须是一个语句...

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您可以嵌套选择并添加子查询:

    SELECT realtable.* 
    FROM (SELECT Point FROM MyTable WHERE Grade="B" LIMIT 1) subquery, MyTable realtable
    WHERE subquery.Point > realtable.Point
    

    【讨论】:

    • 这也很有帮助。虽然我必须给另一个答案,因为它是第一个并且确实回答了这个问题。谢谢!!
    【解决方案2】:

    尝试在子查询中使用如下:

    select * 
    from MyTable 
    where Point < (select Point 
                   from MyTable 
                   where Grade="B")
    

    但如果您的子查询返回多于一行,请尝试使用聚合函数,例如 min

    select * 
    from MyTable 
    where Point < (select min(Point)
                   from MyTable 
                   where Grade="B")
    

    或使用LIMITjoin

    select * 
    from MyTable mt
    join (select Point from MyTable 
          where Grade="B"
          order by Point
          LIMIT 1) mt2 on mt.Point < mt2.Point
    

    【讨论】:

    • 行不通。您需要将子查询限制为只有一个值。
    • 聚合有效但价格昂贵。只需在子查询中添加 limit 1
    • @Clodoaldo Here 说你可以。
    • 这是连接中的子查询。在这种情况下,它不会做。
    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 2013-10-12
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多