2011-03-07 54 views
1

我有一个表SEND与一列Aname复制单一列的单一行:插入记录通过从另一个表

Aname 
------ 
GREAME 
PETER 

另一个表RECEIVE 2列:

Aname        Permission 
----------------------------------------------- 
GREAME (copied from table SEND) 'my own value will be inserted here, 
            specified in insert query' 

PETER (copied from table SEND) 'my own value will be inserted here, 
            specified in insert query' 

现在如上所示,我想插入一个新表RECEIVE只有Aname列从表SEND,并在第二列我会插入一个新的值。

另外,我想,没有重复的值可能会在RECEIVE表中插入:

我想这一点:

Aname Permission 
--------------------- 
GREAME PLAYER 
GREAME PLAYER --- COULD NOT BE INSERTED 
GREAME SALESMAN --- COULD BE INSERTED 

我使用此查询:

insert into receive(Aname, Permission) 
    select Aname , 'Select' 
    from SEND 
    where not exists 
    (select * from RECEIVE where Aname = 'GREAME' and Permission = 'select') 

此查询时间两个名字GREARK & PETER从SEND表中插入到RECEIVE表中,但我希望只有GREAME被拿起,而不是PETER。

我该怎么做?

它会从表发送所有行,并将它们插入表RECEIVE中,但我希望只插入一行。所以我想查询是这样,但它提供了语法错误:

insert into RECEIVE(Aname , Permission) 
    select Aname , 'select' 
    from SEND 
    WHERE Aname = 'GREAME' -------------this line gives error 
    where not exists 
    (select * from RECEIVE where aname = 'GREAME' and Permission = 'select') 
+0

@msrc_s:先生,其捐赠语法错误,而且我知道我们不能同时采用两种where子句,但我希望查询执行工作的其描述。 – sqlchild 2011-03-07 06:09:49

回答

3

不能有2 WHERE子句在一个声明:

insert into RECEIVE(Aname , Permission) 
    select Aname , 'select' 
    from SEND 
    WHERE Aname = 'GREAME' <=== WHERE #1 
    where not exists   <=== WHERE #2 
    (select * from RECEIVE where aname = 'GREAME' and Permission = 'select') 

您需要更改第二部分到AND:

insert into RECEIVE(Aname , Permission) 
    select Aname , 'select' 
    from SEND 
    WHERE Aname = 'GREAME' 
    AND not exists 
    (select * from RECEIVE where aname = 'GREAME' and Permission = 'select') 
相关问题