希望我的挑战有一个简单的解决方案。
我有一个父表我将调用表'A'和一个名为表'B'的子表。我会 喜欢从表'B'中最近一行获取表中给定行的信息 'A'。
例如......表'A'中的父12345在表'B'中有三个子行。行号 3是父级12345的表'B'中最近的一行。我想得到第3行 信息。
我尝试了很多不同的方法,无法让它去做所需的事情,因此我在这里张贴。
提前谢谢。
答案 0 :(得分:2)
在两个表上使用INNER JOIN
,将子ID与父项的子ID相关联:
SELECT b.*
FROM Table_B b INNER JOIN Table_A a
ON b.id = a.Table_B_id
WHERE a.id = 42
ORDER BY b.id DESC
LIMIT 1
我打算建议:
SELECT * FROM Table_B WHERE id IN (
SELECT Table_B_id FROM Table_A ORDER BY id DESC LIMIT 1
)
但显然MySQL在内部选择上不支持LIMIT。
答案 1 :(得分:2)
如果您一次只为一条记录执行此操作,我会使用@ JonathonReinhart的答案。
如果您希望这个适用于表A
中的多个记录,那么我将使用连接到子查询......
SELECT
*
FROM
(SELECT parent_id, MAX(child_id) AS child_id FROM TableB GROUP BY parent_id) AS lookup
INNER JOIN
TableB
ON TableB.parent_id = lookup.parent_id
AND TableB.child_id = lookup.child_id
这假设您的child_id值按您想要的顺序排列。这可能不是真的,您需要使用另一个字段来确定“最新”记录。如果此字段对于每个父项都是唯一的,则相同的想法仍然有效。
SELECT
*
FROM
(SELECT parent_id, MAX(date_stamp) AS date_stamp FROM TableB GROUP BY parent_id) AS lookup
INNER JOIN
TableB
ON TableB.parent_id = lookup.parent_id
AND TableB.date_stamp = lookup.date_stamp
如果child_id
不是您想要的顺序,并且排序字段不是唯一的,则可以提供多个记录而不是1.例如,两个具有相同date_stamp
值的子项。这可以通过相关的子查询来解决,但速度较慢......
SELECT
*
FROM
TableA
INNER JOIN
TableB
ON TableB.parent_id = TableA.parent_id
AND TableB.child_id =
(
SELECT
child_id
FROM
TableB
WHERE
parent_id = TableA.parent_id -- This makes it correlated
ORDER BY
date_stamp DESC,
child_id DESC
LIMIT
1
)