0

私は3つのテーブルを持っています:p、p2l、l

p - p_id; 
p2l - p_id, l_id
l - l_id, date

各 p_id の max(date) を取得するにはどうすればよいですか?

このクエリのいずれかが正しいですか?

1

SELECT plot_id, max(l.date) as l_maxDate
FROM p2l
LEFT JOIN l ON p2l.l_id = l.l_id
Group by p_id

2

SELECT plot_id, maxDate.maxLDate,
FROM p2l
INNER JOIN 
  (SELECT l_id, MAX(date) AS maxLDate
  FROM l
  GROUP BY l_id) maxDate 
ON maxDate.l_id = p2l.l_id 
GROUP BY p_id 
4

2 に答える 2

0
  1. 最初のものは正しいようですが、一致しない場合は最大日付とnullが得られますが、テーブルp2lではなくテーブルpのp_idの結果は得られません

  2. これは非常に興味深いものです。l_id が l テーブルで一意ではないことを前提としています。そして、thre が結合されていない p_id を削除します。ただし、max を選択するためのこの余分なステートメントはオーバーヘッドであり、あまり追加されません。

すべての p_id を取得するには (リンクのないものを含む)

SELECT  p.p_ID, MAX(l.date) max_date
FROM    p
        LEFT JOIN p2l
            ON p.p_id = p2l.p_ID
        LEFT JOIN l 
            ON p2l.l_id = l.l_id
GROUP   BY p.p_ID
于 2013-02-20T08:47:28.260 に答える
0
SELECT  p.p_ID, MAX(l.date) max_date
FROM    p
        INNER JOIN p2l
            ON p.p_id = p2l.p_ID
        INNER JOIN l 
            ON p2l.l_id = l.l_id
GROUP   BY p.p_ID

ただし、 table からのレコードが必要ない場合p。そのテーブルを結合から削除するだけです。

SELECT  p2l.p_ID, MAX(l.date) max_date
FROM    p2l
        INNER JOIN l 
            ON p2l.l_id = l.l_id
GROUP   BY p2l.p_ID
于 2013-02-20T08:42:54.233 に答える