代码之家  ›  专栏  ›  技术社区  ›  Parallax

MySQL中包含数学比较的SQL查询

  •  1
  • Parallax  · 技术社区  · 9 年前

    我需要有一个SQL,它以比较的方式使用(随机化)表a上的值来查找表B中的值。表A的值是以随机方式产生的。表B的值是以累积分布函数的方式排列的。需要的是SQL将从表B中获得满足条件的第一行。

    Table A:
    +----+-------+
    | ID | value |
    +----+-------+
    |  1 | 0.1234|
    |  2 | 0.8923|
    |  3 | 0.5221|
    +----+-------+
    
    Table B:
    +----+-------+------+
    | ID | value | name | 
    +----+-------+------+
    |  1 | 0.2000| Alpha|
    |  2 | 0.5000| Beta |
    |  3 | 0.7500| Gamma|
    |  4 | 1.0000| Delta|
    +----+-------+------+
    
    Result should be:
    +----+-------+------+
    | ID | value | name |
    +----+-------+------+
    |  1 | 0.1234| Alpha|
    |  2 | 0.8923| Delta|
    |  3 | 0.5221| Gamma|
    +----+-------+------+
    

    值0.1234小于B的所有值,但Alpha的值最小。

    值0.8923小于1.000->希腊字母表的第4个字母

    值0.5221小于0.7500和1.000,但0.7500最小-->伽马。

    只有当表A有一个值时,此查询才有效:

    select value, name
    from B
    where (select value from A) &lt value;
    

    你知道如何在满桌A的情况下完成这项工作吗?

    1 回复  |  直到 9 年前
        1
  •  1
  •   dotnetom    9 年前

    您可以使用子查询获取所需的数据:

    SELECT a.ID, a.value, 
        (SELECT b.name FROM TableB b WHERE a.value < b.value ORDER BY b.ID ASC LIMIT 1) as name
    FROM TableA a
    

    在本例中,对于表A中的每一行,您可以在表B中找到第一条记录,该记录在列中具有较大的数字 value 。根据您的要求,操作员 < 可能需要更新到 <= -这取决于你的要求