Mysql 为给定父级选择最近的子行
希望我的挑战有一个简单的解决方案 我有一个父表,我称之为表“a”,还有一个子表,我称之为表“B”。我会的 是否希望从表“B”中最近的行中获取表中给定行的信息 “A” 例如。。。表“A”中的父12345在表“B”中有三个子行。行号 3是表“B”中父级12345的最近一行。我想要第三排的 信息 我尝试了很多不同的方法,但无法让它做需要的事情,因此我在这里发布了这篇文章 提前感谢。在这两个表上使用,通过子id将它们与父/母的子id关联:Mysql 为给定父级选择最近的子行,mysql,sql,parent-child,Mysql,Sql,Parent Child,希望我的挑战有一个简单的解决方案 我有一个父表,我称之为表“a”,还有一个子表,我称之为表“B”。我会的 是否希望从表“B”中最近的行中获取表中给定行的信息 “A” 例如。。。表“A”中的父12345在表“B”中有三个子行。行号 3是表“B”中父级12345的最近一行。我想要第三排的 信息 我尝试了很多不同的方法,但无法让它做需要的事情,因此我在这里发布了这篇文章 提前感谢。在这两个表上使用,通过子id将它们与父/母的子id关联: SELECT b.* FROM Table_B b INNER
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显然不支持对内部选择的限制。如果一次只对一条记录执行此操作,我会使用@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
如果子\u id
不是您想要的顺序,并且排序字段不是唯一的,则可以提供多条记录,而不是1条。例如,两个子项具有相同的date\u 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
)
谢谢你的帮助,乔纳森。