这里是我的问题:SQL加入两个表
我有两个表。表A的每个条目在表B中具有与ID匹配的多个条目。我现在想要得到表A的所有条目,并且有一个表B的数据条目 - 这个表中具有最高ID的条目。
表A具有ID
表B具有自己的ID和ID_OF_TABLE_A(对于两种之间的关系)
表A具有一对多关系表B.我希望所有表A的条目与B中ID最高的条目相匹配。有什么方法可以在SQL语句中实现这一点?我尝试了各种连接,因为我需要选择结果中匹配条目的信息。
这里是我的问题:SQL加入两个表
我有两个表。表A的每个条目在表B中具有与ID匹配的多个条目。我现在想要得到表A的所有条目,并且有一个表B的数据条目 - 这个表中具有最高ID的条目。
表A具有ID
表B具有自己的ID和ID_OF_TABLE_A(对于两种之间的关系)
表A具有一对多关系表B.我希望所有表A的条目与B中ID最高的条目相匹配。有什么方法可以在SQL语句中实现这一点?我尝试了各种连接,因为我需要选择结果中匹配条目的信息。
如何
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)
我用这个,它完美的工作。所有其他人似乎也工作。这么多好的答案,谢谢大家! – 2014-12-02 12:17:30
试试这个:
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;
因为b有点令人困惑 – Strawberry 2014-12-02 10:02:18
这里您筛选从表中需要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);
未宣布FK对象本身,但答案仍然有效。 – 2014-12-02 10:08:21
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
这应该工作。预先筛选出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
下面几个正确的答案。他们都工作得很好 - 比其他人更复杂。 – 2014-12-02 12:17:54