2016-10-27 33 views
0

他のテーブルの情報を使用してテーブルを更新する必要があります。 これは私のSQLクエリです:Postgresqlで結合テーブルを更新する

UPDATE service a 
JOIN agency b USING (feed_id) 
SET end_date = (SELECT MIN(start_date)-1 
       FROM service c 
       JOIN agency d USING (feed_id) 
       WHERE b.feed_id = a.feed_+1 
         AND b.agency_id = d.agency_id) 

唯一の方法は、代理店のテーブルで両方のテーブルに参加しているので、私は状態の代理店IDが必要です。

Postgresは返す:

ERROR: syntax error at or near "JOIN" 
LINE 1: UPDATE service a JOIN agency b USING (feed_id) SET end_date ... 

任意のヒント?

+0

を "*動作しません*は" 有効なPostgresのエラーメッセージではありません。 [**マニュアル**](https://www.postgresql.org/docs/current/static/sql-update.html)でその構文を見つけましたか? –

+0

あなたの質問には、問題のテーブルのための 'create table'ステートメントと、いくつかのサンプルデータと、そのデータに基づいて期待される結果を追加してください。 [**フォーマット**](http://stackoverflow.com/editing-help#code)**テキスト**お願い、[スクリーンショットなし](http://meta.stackoverflow.com/questions/285551/why 285557#285557) –

答えて

1

これを試してみてください:)

UPDATE service 
SET end_date = (SELECT MIN(start_date)-1 
       FROM service c 
       JOIN agency d USING (feed_id) 
       WHERE b.feed_id = a.feed_+1 
         AND b.agency_id = d.agency_id) 
FROM service a 
JOIN agency b USING (feed_id) 
+0

ターゲットテーブルを 'FROM'節で繰り返していないかどうかを確認してください。 UPDATEステートメント。 –

+0

私は 'JOIN"で文法エラーを受け取りません。もしそうでなければ、 –

+0

は動作しません。サブクエリに2番目の結合を追加する方が良い –

0

このクエリは動作します:

UPDATE service a 
SET end_date = (SELECT MIN(start_date)-1 
      FROM service b 
      JOIN agency c ON b.feed_id = c.feed_id 
      JOIN agency d ON a.feed_id = d.feed_id 
      WHERE b.feed_id = a.feed_id+1 
      AND c.agency_id = d.agency_id 
      ) 
関連する問題