一度に1つのレコードでこれを行う場合は、@ 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値が順番になっていることを前提としていあなたは欲しい。これは当てはまらない可能性があり、「最新の」レコードを決定するために別のフィールドを使用する必要があります。このフィールドが各親に対して一意であるならば、同じアイデアはまだ機能します。 child_id
が希望の順序ではなく、注文フィールドが一意ではない、これはたとえば、代わりに1の複数のレコードを与えることができ、同じdate_stamp
値を持つ2人の子供
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
。これは相関サブクエリで解決できますが、それは遅いですが...
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
)
助けてくれてありがとうジョナサン。 –