2011-03-07 53 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') 
相關問題