2012-03-13 80 views
1

我是大多数时间使用ORM的SQL新手。我有以下查询别名麻烦:在插入语句中使用别名

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 2012-03-13 22:20:16

+0

我需要能够在最内部选择语句的where子句中引用'uid' – ajbeaven 2012-03-13 22:22:01

回答

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 2012-03-13 22:38:58

+0

很高兴它可以工作。 – Taryn 2012-03-13 22:39:59