2012-03-13 8 views
1

私はほとんどの場合ORMを使用しているSQL初心者です。私は次のクエリで別名を持つ問題を抱えています:insertステートメントでエイリアスを使用する

command.CommandText = @" 
    INSERT INTO permissions (userid, remoteid) 
     SELECT userid as uid, :remoteid as rid 
     FROM users 
     WHERE companyid = :companyid 
      AND NOT EXISTS (
       SELECT 1 
       FROM permissions 
       WHERE userid = uid 
       AND remoteid = rid 
      )"; 

command.Parameters.AddWithValue("companyid", companyId); 
command.Parameters.AddWithValue("remoteid", resourceId); 

クエリを実行すると、私は次のエラーを取得する:

ERROR: 42703: column "uid" does not exist 

は私が間違って何をしているのですか?エイリアスはこのように使用されていて、INSERTの文で使用できますか?これについて

+0

あなたはエイリアスを削除した場合、クエリ動作しますか? – Taryn

+0

私は、最も内側のselectステートメントのwhere節で 'uid'を参照できるようにする必要があります。 – ajbeaven

答えて

1

方法:

command.CommandText = @" 
    INSERT INTO permissions (userid, remoteid) 
     SELECT userid, :remoteid as rid 
     FROM users uid 
     WHERE companyid = :companyid 
      AND NOT EXISTS (
       SELECT 1 
       FROM permissions 
       WHERE userid = uid.userid 
       AND remoteid = rid 
      )"; 

command.Parameters.AddWithValue("companyid", companyId); 
command.Parameters.AddWithValue("remoteid", resourceId); 
+0

はい、質問をした後でこれが機能することがわかりました。私も 'rid'エイリアスを削除して:remoteidパラメータに置き換え、' uid'を 'u1'に改名しました。 – ajbeaven

+0

うまくいきました。 – Taryn

関連する問題