SQL加入两个表

时间:2014-12-02 09:53:58

标签: mysql greatest-n-per-group

这是我的问题:

我有两张桌子。表A的每个条目在表B中具有与ID匹配的若干条目。我现在想要获得表A的所有条目,其中包含表B的一个数据条目 - 该表中具有最高ID的那个。

  

表A有ID

     

表B有自己的ID和ID_OF_TABLE_A(两者之间的关系)

表A与表B有一对多的关系。我想要表A中的所有条目,与B中具有最高ID的条目匹配。有没有办法在SQL语句中实现这一点?我尝试了各种连接,因为我需要选择结果中匹配条目的信息。

5 个答案:

答案 0 :(得分:2)

怎么样

SELECT *
FROM   tableA a
INNER JOIN tableB b ON a.ID = b.ID_OF_TABLE_A
WHERE b.ID = (SELECT MAX(ID) FROM tableB c WHERE b.ID = c.ID)

答案 1 :(得分:1)

试试这个:

SELECT a.*, b.* 
FROM tableA a 
LEFT OUTER JOIN (SELECT b.* 
                 FROM tableB b 
                 INNER JOIN (SELECT ID_OF_TABLE_A, MAX(ID) bID 
                             FROM tableB 
                             GROUP BY ID_OF_TABLE_A
                           ) c ON b.ID_OF_TABLE_A = c.ID_OF_TABLE_A AND b.ID = c.bID
                ) AS b ON a.ID = b.ID_OF_TABLE_A;

答案 2 :(得分:1)

您可以使用内联视图,在分组子句和max函数的帮助下,从表b中过滤所需的行,如下所示:

select a.*, b.*
from a
join (
    select max(id) as id_b_max, id_a
    from b
    group by id_a
) b
on a.id = b.id_a;

经过测试:

create table a(id int);

create table b(id int, id_a int);

insert a values (1);

insert b values(1, 1);
insert b values(2, 1);
insert b values(3, 1);

答案 3 :(得分:1)

select a.id, max(b.id)
from  table_a a join table_b b on a.id = b.table_a_id
group by a.id

答案 4 :(得分:1)

这应该有效。预过滤掉ID_OF_TABLE_A的最大ID。然后加入那个id。

SELECT A.*, B.*
FROM A
    INNER JOIN ( SELECT max( ID ) AS id, ID_OF_TABLE_A 
                 FROM B
                 GROUP BY ID_OF_TABLE_A) AS grp_b 
        ON grp_b.ID_OF_TABLE_A = a.ID
    INNER JOIN B ON b.ID = grp_b.id