2012-02-02 120 views
-4

我最近有一個問題,我不確定我能否完成。如下所示:'使用單個查詢將4個最小的客戶ID更新爲男性。'我正在使用Oracle。我的未完成代碼如下:Sql update查詢

create table customer_09 
     (
     custid varchar(5)primary key not null, 
     firstname varchar(20), 
     lastname varchar(20), 
     DOB date, 
     address1 varchar(40), 
     address2 varchar(40), 
     phone varchar(7) 
     ); 


UPDATE customer_09 
SET gender = 'male' 
WHERE custid = (select min(custid) from customer_09) 

如果任何人有正確的代碼,請你與我分享。

謝謝

+6

不要在您的表需要一個「性別」一欄? – CloudyMarble 2012-02-02 13:03:04

+1

這是回答'家庭作業'帖子的麻煩。 OP *永遠不會*一旦他有了他所需要的東西就會回來。 – Yuck 2012-02-02 13:10:13

+0

算到目前爲止,三個Oracle語法不正確,一個後來指出它不是Oracle。一個MySQL語法。一個不是真正的答案...和@a_horse_with_no_name的正確答案。 – Ben 2012-02-02 13:46:41

回答

0

我不熟悉Oracle語法,但是因爲你必須更新4條記錄,你應該使用某種機制,可以讓你限制更新的行數。此外;鑑於您必須根據記錄的特定順序來更新記錄,所以您可以使用某種排序機制。

0

我會嘗試這樣的:

UPDATE customer_09 
SET gender = 'male' 
WHERE custid IN (SELECT custid FROM (select custid from customer_09 ORDER BY custid DESC) WHERE rownum <= 3) 
0

試試這個:

UPDATE customer_09 
SET gender = 'male' 
WHERE custid = (select custid from customer_09 order by custid asc limit 4) 

也許極限指令在Oracle中不工作。 如果不工作嘗試WHERE ROWNUM <= 4之前order by

+0

Oracle沒有'LIMIT'。 – Yuck 2012-02-02 13:02:28

+0

@chris:不,它不是 – 2012-02-02 14:20:20

+0

我知道,我很抱歉,你之前告訴過我。 – chris 2012-02-02 14:22:55

0

我認爲你正在尋找這個

UPDATE customer_09 SET gender = 'male' WHERE custid IN (select custid from customer_09 where rownum <= 4 order by custid asc); 
+1

我希望不是,在與'rownum <='相同的子選擇中'order by'不能保證每次都返回相同的東西。 – Ben 2012-02-02 13:44:08

5

當使用ROWNUM限制的結果,這不能在同一「級別」內部完成,通過完成(因爲rownumbers在之前分配順序 ORDER BY完成)。

所以正確的方法應該是這樣:

UPDATE customer_09 
SET gender = 'male' 
WHERE custid IN (SELECT custid 
       FROM ( 
        SELECT custid, 
          rownum as rn 
        FROM customer_09 
        ORDER BY custid 
       ) 
       WHERE rn <= 4)