2016-11-17 162 views
1

我想將hk_room表中的所有行復制到hk_history中,但rStatus =' - '或rStatus ='Long Stay'和rStatus ='Check Out'的行除外。sql insert into,select,where語句

' - '是rStatus屬性的默認值。

我已經試過這兩個查詢:

INSERT INTO hk_history 
(rNo,rStatus,bs,bq,hk,ds,dq,pc,twl,fm,amt,db,mw,hkR,fo_R,svR,rDate) 
SELECT rNo,rStatus,bs,bq,hk,ds,dq,pc,twl,fm,amt,db,mw,hkR,fo_R,svR,rDate 
FROM hk_room1; 
WHERE rStatus <> '-'; 

INSERT INTO hk_history 
(rNo,rStatus,bs,bq,hk,ds,dq,pc,twl,fm,amt,db,mw,hkR,fo_R,svR,rDate) 
SELECT rNo,rStatus,bs,bq,hk,ds,dq,pc,twl,fm,amt,db,mw,hkR,fo_R,svR,rDate 
FROM hk_room1; 
WHERE rStatus = 'Long Stay' AND rStatus = 'Check Out'; 

but I got this error

+6

'hk_room1;'';'結束語句。 –

+1

確認上述不明確。如果希望where子句作爲插入的一部分執行,請在'hk_room1'後刪除';'。 – xQbert

+0

是你可以想出的最隱祕的列名稱集合嗎? – e4c5

回答

0

你有一個分號befor e where在第一個查詢中:

INSERT INTO hk_history 
    (rNo,rStatus,bs,bq,hk,ds,dq,pc,twl,fm,amt,db,mw,hkR,fo_R,svR,rDate) 
    SELECT rNo,rStatus,bs,bq,hk,ds,dq,pc,twl,fm,amt,db,mw,hkR,fo_R,svR,rDate 
    FROM hk_room1; 
    -------------^ 
    WHERE rStatus <> '-'; 

您需要將其刪除。

要做到這一點:

想從hk_room表中的所有行復制到hk_history除非RSTATUS =行 ' - ' 或RSTATUS = '長住' 和RSTATUS = '退房'。

只需使用一條語句:

INSERT INTO hk_history 
    (rNo,rStatus,bs,bq,hk,ds,dq,pc,twl,fm,amt,db,mw,hkR,fo_R,svR,rDate) 
    SELECT rNo,rStatus,bs,bq,hk,ds,dq,pc,twl,fm,amt,db,mw,hkR,fo_R,svR,rDate 
    FROM hk_room1 
    WHERE NOT (rStatus = '-' OR 
       rStatus = 'Long Stay' and rStatus = 'Check Out' 
      ); 

您還可以短語,如:

WHERE rStatus <> '-' AND 
      (rStatus <> 'Long Stay' OR rStatus <> 'Check Out') 

然而,以前的版本似乎是你的意圖更清晰。

+0

我明白了,所以問題是分號。謝謝。 – 8man

0
INSERT INTO hk_history 
(rNo,rStatus,bs,bq,hk,ds,dq,pc,twl,fm,amt,db,mw,hkR,fo_R,svR,rDate) 
SELECT rNo,rStatus,bs,bq,hk,ds,dq,pc,twl,fm,amt,db,mw,hkR,fo_R,svR,rDate 
FROM hk_room1 
WHERE rStatus IN ('-', 'Long Stay' , 'Check Out') 
; 

這應該有助於