2014-12-02 99 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