我有两个相互关联的表A,B (简化):

A:
+-------+---------+ 
| id    | type    | 
+-------+---------+ 
| 1     | apple   | 
| 2     | orange  | 
| 3     | banana  | 
+-------+---------+ 

B:
+-------+---------+-----------+ 
| id    | a_id    |  rank     |  
+-------+---------+-----------+  
| 1     | 1       |  9.9      |
| 2     | 1       |  7.7      |
| 3     | 2       |  3.3      |
| 4     | 2       |  8.8      |
| 5     | 2       |  1.1      |  
| 6     | 3       |  3.3      |
| 7     | 3       |  2.2      | 
| 8     | 1       |  0.0      | 
+-------+---------+-----------+   

什么mysql查询将返回以下结果?

Result
+-------+---------+-----------+ 
| id    | type    |  rank     |  
+-------+---------+-----------+  
| 1     | apple   |  0.0      | 
| 2     | orange  |  1.1      | 
| 3     | banana  |  2.2      | 
+-------+---------+-----------+ 

选择在表B中最后插入的等级( 不是 MAX(rank))。

需要从ID最高的表B中选择结果表中的排名。

#1楼 票数:6 已采纳

更新

您可能想要尝试与子查询table_b以获得table_b每个a_idMAX(id) ,然后与table_b进行INNER JOIN以获得排名:

SELECT   ta.id, 
         ta.type,
         tb.rank
FROM     table_a ta
JOIN     (
            SELECT   MAX(id) AS id, 
                     a_id
            FROM     table_b
            GROUP BY a_id
         ) sub_q ON (sub_q.a_id = ta.id)
JOIN     table_b tb ON (tb.id = sub_q.id)
ORDER BY ta.id;

测试用例:

CREATE TABLE table_a (id int, type varchar(10));
CREATE TABLE table_b (id int, a_id int, rank decimal(2,1));

INSERT INTO table_a VALUES (1, 'apple');
INSERT INTO table_a VALUES (2, 'orange');
INSERT INTO table_a VALUES (3, 'banana');

INSERT INTO table_b VALUES (1, 1, 9.9);      
INSERT INTO table_b VALUES (2, 1, 7.7);       
INSERT INTO table_b VALUES (3, 2, 3.3);       
INSERT INTO table_b VALUES (4, 2, 8.8);      
INSERT INTO table_b VALUES (5, 2, 1.1);         
INSERT INTO table_b VALUES (6, 3, 3.3);       
INSERT INTO table_b VALUES (7, 3, 2.2);       
INSERT INTO table_b VALUES (8, 1, 0.0);      

结果:

+------+--------+------+
| id   | type   | rank |
+------+--------+------+
|    1 | apple  |  0.0 |
|    2 | orange |  1.1 |
|    3 | banana |  2.2 |
+------+--------+------+
3 rows in set (0.01 sec)

#2楼 票数:2

那这个呢:

SELECT a.id, a.type, b.rank 
FROM tempa a, tempb b 
WHERE a.id = b.a_id 
  AND b.id = (
    SELECT MAX(b.id) 
    FROM tempb b 
    WHERE b.a_id = a.id
)
ORDER BY a.id;

输出:

1, apple, 9.50
2, orange, 1.10
3, banana, 5.50

#3楼 票数:2

SELECT a.id,
       a.type,
       b1.rank
 FROM a,
      b b1
 WHERE b1.a_id = a.id
 AND NOT EXISTS( SELECT b2.id
                  FROM b AS b2
                 WHERE b2.a_id = a.id
                   AND b2.id > b1.id
               )
 ORDER BY a.type

  ask by Yeti translate from so

未解决问题?本站智能推荐:

2回复

MySQL查询返回“空集”,为什么?

为什么以下查询返回一个空集? 结果:
3回复

MySQL查询返回错误

我正在尝试从数据库获取坐标和位置,但是我的服务器返回了此错误: 我是否必须使用`来转义“ lat”和“ long”,还是该公式完全错误? 谢谢。 另外,我使用的坐标是0、0(仅用于测试目的)。
1回复

MySQL查询返回双打

由于某种原因,当我运行此查询时,它将两次返回相同的数据(双精度)。 数据仅在数据库中一次。 为什么返回双打? 我不知道。 注意:我是这类查询的新手,因此非常感谢您提供任何指导。 .....这是全部功能。 }
1回复

mysql查询返回码

我正在编写一个MYSQL存储过程。 因为我知道使用HANDLER,所以我们可以检查SELECT STATEMENT的条件。 在DB2中,我们可以在语句之后立即使用SQLCODE检查返回码。 请让我知道如何处理重复索引,多个行,游标问题,源变量与表字段之间的数据不匹配。 MYSQL中有
1回复

为什么mysql查询返回不同的结果?

使用以下select查询合并两个表: 结果输出: 你看,它显示free为10,但在我的damage_stocks表,免费列不包含任何值和purchase_invoice表中,列free包含2对invoice_no 1。 输出: 这个 返回一个空值,因为没有添加任何值。 我
1回复

MySQL查询返回奇怪的结果

我有以下MySQL查询: 但是,当我运行查询时,在opt.oo_type列中我仍在获取image和iframe结果。 opt.oo_type的类型为enum('image','iframe','other')谁能告诉我为什么我仍然得到这些结果?
2回复

MySQL和子查询没有返回结果

我有尚未100%清理的MySQL数据库和SQL查询,但这不是最大的问题。 主要问题是一个子查询无法正常工作。 请看下面。 问题是我的代码的以下部分。 在两种情况下,它应该返回一行: 1)如果sarjojen_kilpailukausien_pelaajastatukset = sa
1回复

MySQL查询不会返回预期结果

考虑以下数据集: 表 架构定义如下: 我正在尝试建立以下查询: 但是,我得到的结果是《 Winter is Coming and The Kingsroad当我只希望获得《 The Kingsroad 我在这里做错了什么? 编辑 :这是我刚刚尝试通过联接,但是它仍然给我相同的