2012-03-05 40 views
2

我有一個名爲SCORPADData的數據庫,它有兩個表:Parts和Failure_Rates。我試圖將部分表中的可修復列設置爲一個布爾值,該值基於譴責率表中的值,該值位於0到100.0之間。 100.0的譴責率意味着該部分不能修復。在其他表上執行SQL更新設置

我這樣做是因爲我被要求帶一個數據庫,並使其可讀取到最初從另一個更新中讀取的軟件。我試圖以兩種不同的方式來做到這一點:使用大小寫,並使用設置爲false的Where。這些陳述如下。

UPDATE SCORPADData.Parts 
SET Reparable = CASE 
    WHEN SCORPADData.Failure_Rates.Part_ID = SCORPADData.Parts.ID AND SCORPADData.Failure_Rates.Condemnation_Rate = 100.0 
     THEN 'TRUE' 
     ELSE 'FALSE' 
    END 
FROM SCORPADData.Parts , SCORPADData.Failure_Rates 

我得到的錯誤是「找不到列SCORPADDATA.FAILURE_RATES.CONDEMNATION_RATE」。

UPDATE SCORPADDATA.PARTS 
SET REPARABLE = TRUE 

UPDATE SCORPADDATA.PARTS 
SET REPARABLE = FALSE 
FROM SCORPADDATA.FAILURE_RATES 
WHERE SCORPADDATA.PARTS.ID = SCORPADDATA.FAILURE_RATES.PART_ID 
    AND SCORPADDATA.FAILURE_RATES.CONDEMNATION_RATE = 100.0 

我在這裏得到的錯誤是語法錯誤;它不喜歡我放置FROM。將它放在WHERE之後也不起作用,因爲它找不到列。

在這兩種情況下,我認爲FROM不能正常工作,因爲我希望因爲FAILURE_RATES表未在UPDATE SET語句中使用。我正在使用java應用程序中的H2數據庫。我是SQL新手,所以如果這是我應該知道的,但是我很抱歉,但是在Google(或SO)中搜索WHERE和FROM這樣的詞不會在任何地方找到任何人。

回答

4

我建議使用子查詢,因爲它適用於所有數據庫。一個完整的例子:

drop table Parts; 
drop table Failure_Rates; 
create table Parts(ID int, REPARABLE boolean); 
create table Failure_Rates(PART_ID int, Condemnation_Rate double); 

insert into Parts values(1, null), (2, null), (3, null); 
insert into Failure_Rates values(1, 50), (2, 100); 

update Parts p set Reparable = (select 
    (case when Condemnation_Rate = 100 then true else false end) 
    from Failure_Rates f where f.PART_ID = p.id) 
where exists (select * from Failure_Rates f where f.PART_ID = p.id); 

select * from Parts; 
-2
UPDATE SCORPADDATA.PARTS 
SET REPARABLE = FALSE 
FROM SCORPADDATA.PARTS ,SCORPADDATA.FAILURE_RATES 
WHERE SCORPADDATA.PARTS.ID = SCORPADDATA.FAILURE_RATES.PART_ID 
    AND SCORPADDATA.FAILURE_RATES.CONDEMNATION_RATE = 100.0 
+2

這不支持H2。 – 2012-03-06 05:43:36