2014-12-02 144 views
2

这里是我的问题:SQL加入两个表

我有两个表。表A的每个条目在表B中具有与ID匹配的多个条目。我现在想要得到表A的所有条目,并且有一个表B的数据条目 - 这个表中具有最高ID的条目。

表A具有ID

表B具有自己的ID和ID_OF_TABLE_A(对于两种之间的关系)

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

+0

下面几个正确的答案。他们都工作得很好 - 比其他人更复杂。 – 2014-12-02 12:17:54

回答

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) 
+0

我用这个,它完美的工作。所有其他人似乎也工作。这么多好的答案,谢谢大家! – 2014-12-02 12:17:30

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; 
+0

因为b有点令人困惑 – Strawberry 2014-12-02 10:02:18

1

这里您筛选从表中需要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); 
+0

未宣布FK对象本身,但答案仍然有效。 – 2014-12-02 10:08:21

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 
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