2

値を別のテーブルと結合してテーブルを更新しようとしています。これまでの私のクエリは次のとおりです。

    UPDATE LOGIN  SET LOGIN.DISABLED_IND = 'N', LOGIN.DREASON = 'Test'
        FROM  CONTACT
        WHERE CONTACT.CONTACT_ID = LOGIN.CONTACT_ID 
        AND CONTACT.RID ='abc'

これを実行すると、これが得られます

[Error Code: 933, SQL State: 42000] ORA-00933: SQL command not properly ended

ありがとう

4

3 に答える 3

2

試す

 UPDATE LOGIN L SET L.DISABLED_IND = 'N', L.DREASON = 'Test'
 WHERE L.CONTACT_ID 
 IN ( SELECT C.CONTACT_ID FROM CONTACT C WHERE C.CONTACT_ID = L.CONTACT_ID AND 
 C.RID='abc');

別のより複雑なオプションについては、 http: //geekswithblogs.net/WillSmith/archive/2008/06/18/oracle-update-with-join-again.aspxを参照してください。

于 2011-07-31T20:51:30.943 に答える
2

の行の大部分を更新することが予想される場合LOGINは、EXISTS を使用する方が効率的です。

UPDATE LOGIN  l
   SET l.DISABLED_IND = 'N', 
       l.DREASON = 'Test'
 WHERE EXISTS (
    SELECT 1
      FROM CONTACT c
     WHERE c.CONTACT_ID = l.CONTACT_ID 
       AND c.RID ='abc' )

の行の比較的小さな部分を更新する場合はLOGIN、Yahia の IN を使用するアプローチの方が効率的である可能性があります。

UPDATE LOGIN  l
   SET l.DISABLED_IND = 'N', 
       l.DREASON = 'Test'
 WHERE l.contact_id IN (
    SELECT c.contact_id
      FROM CONTACT c
     WHERE c.RID ='abc' )
于 2011-07-31T21:02:22.160 に答える
0

あなたの構文は完全に正しくありません。このウィキペディアの記事には、選択できるいくつかの例があります。

例えば

UPDATE l
 SET l.DISABLED_IND = 'N', l.DREASON = 'Test'
 FROM LOGIN l
  JOIN CONTACT c
   ON c.CONTACT_ID = l.CONTACT_ID AND c.RID ='abc'
于 2011-07-31T20:53:11.200 に答える