2016-07-15 4 views
0

私はトレーダー(トレーダー)とそのスーパーバイザとのテーブルを持っています。 (監督者は、トレーダーのための新監督(NEWSUPERVISORS)を持っている別のテーブルそのものですサブテーブルの結合を使用したUPDATEクエリ

TRADERS - 。traderid、名監督、 NEWSUPERVISORS - traderid、スーパーバイザ

私は新しいとスーパーバイザーのためTRADERSテーブルを更新する必要があります。

update traders set e.supervisor = n.supervisor from traders join 
(select traderid, supervisor from new_supervisor n) on e.traderid= n.traderid 

このクエリは動作しません上司。あなたはこのクエリと間違っているものをアドバイスすることができます。

+3

何RDBMSを使用していますか?多くのプラットフォームでUPDATEステートメントで結合を使用することはできません。また、それは動作しないと言うとき、どのように動作しませんか?エラーメッセージが表示されますか? – ninesided

+0

私はpostgresqlを使用しています。私が得るエラーは、関係の列 "e"です "トレーダー"は存在しません。 @Pirateのクエリも同様に試みると同じエラーが発生する – megan

答えて

0

これは標準SQLです:あなたは

update traders 
    set supervisor = (
        select n.supervisor 
         from new_supervisor n 
         where traders.traderid = n.traderid 
        ) 
where exists (
       select * 
       from new_supervisor n 
       where traders.traderid = n.traderid 
      ); 
0

いくつかのSQLクエリは、単純ではありません「更新可能。」あなたはトンを持っていますo trader_idを更新する必要がある1つのクエリを実行し、次にTRANSACTIONのようなストアドプロシージャを使用するなど、trader_idに対してそれぞれupdateクエリを実行してこの結果セットをループします。

+0

SQLクエリは単純に更新可能ではありません。 – onedaywhen

+0

必ずしもそうである必要はありません。 Microsoft Accessでは、 "更新可能なレコードセット"を作成できます。しかし、特定の種類のクエリに対してのみ。しかし、明らかに、特定の製品の利便性と独自のSQLエンジンを使用して行われたエッジケースです。 –

+0

[更新のビューは、リレーショナルの世界で長い間注目されています](https://books.google.co.uk/books?id=RXW4PtS4bEYC)。しかし、*データベースに問い合わせる*データベースを更新することは全く別の操作です。確かに、用語の追加クエリ、 'update query'と 'delete query'はMS Accessのドキュメントにありますが、まだoyxmoronsです!私の本では、MS AccessはSQL-92のエントリレベルに準拠していないため、SQL製品としての資格を持たないため、証拠として使用することはできません:) – onedaywhen

関連する問題