这是我的问题:
我有两张桌子。表A的每个条目在表B中具有与ID匹配的若干条目。我现在想要获得表A的所有条目,其中包含表B的一个数据条目 - 该表中具有最高ID的那个。
表A有ID
表B有自己的ID和ID_OF_TABLE_A(两者之间的关系)
表A与表B有一对多的关系。我想要表A中的所有条目,与B中具有最高ID的条目匹配。有没有办法在SQL语句中实现这一点?我尝试了各种连接,因为我需要选择结果中匹配条目的信息。
答案 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