2017-01-26 4 views
0

SQLを使用してpgAdminに新しいテーブルを作成しようとしています。私の目標は、別のテーブル(ナビゲーションと呼ばれる)のグループ化に基づいて値を集計する新しいテーブル(メタデータと呼ばれる)を作成することです。テーブルの値を別のテーブルのグループの最小値に基づいて設定します

は、ナビゲーションテーブルは次のようであると言う:

VIDEO LATITUDE 
vid1 50 
vid1 51 
vid1 52 
vid2 49 
vid2 51 

私は(いくつかの他のデータと)ナビゲーションをまとめたメタデータテーブルを作成する必要があります。このような何か:

VIDEO minLATITUDE LINK 
vid1  50  http://foo 
vid2  49  http://bar 

私は(this questionに基づいて)SQLコードをしようとしてきた:

UPDATE f1188hw.YTmeta as a 
SET minLat = b.lat 
FROM f1188hw.YTmeta 
INNER JOIN (SELECT video, min(lat) AS lat 
    from f1188hw.nav 
    group by video) AS b 
ON a.video = b.video; 

そしてpgAdminでは、返されます。

ERROR: invalid reference to FROM-clause entry for table "a" 
SQL state: 42P01 
Hint: There is an entry for table "a", but it cannot be referenced from this part of the query. 
Character: 158 

私は私は推測しています明白なものがありませんでしたが、pgAdminのマニュアルを使って検索したり読んだりすることができませんでした。

答えて

1

使用

UPDATE f1188hw.YTmeta as a 
SET a.minLat = b.lat 
FROM (SELECT video, min(lat) AS lat 
     from f1188hw.nav 
     group by video) AS b 
WHERE a.video = b.video; 

それとも

UPDATE f1188hw.YTmeta 
SET minLat = (SELECT min(lat) 
       from f1188hw.nav 
       where f1188hw.YTmeta.video = video 
      ) 
+0

後者の提案は素晴らしい作品と私​​の試みよりもはるかに簡潔に見えます。 – Bird

関連する問題