2012-03-27 9 views
1

私は、MySQLからSQLIte3への移行を試みていて、アップデートの問題に遭遇しています。私はredhatでSQLite 3.6.20を使用しています。sqlite3 UPDATEでNULLが生成される

コードの私の最初の行は

update atv_covar set noncomp= 2; 

(右端の列)noncompすべての値は適切には、得られるコードの2行目である2

select * from atv_covar; 
A5202|S182|2 
A5202|S183|2 
A5202|S184|2 

に設定され、通常に振る舞います私の問題:

update atv_covar 
set noncomp= (select 1 from f4003 where 
       atv_covar.study = f4003.study and 
       atv_covar.rpid = f4003.rpid and 
       (rsoffrx="81" or rsoffrx="77")); 

エラーを生成せずに実行され、適切に設定されます。 v_covar.noncompを1に設定してSELECTステートメントに一致させます。問題は、それは私がすべてのヘルプは歓迎されるであろう、それは2

select * from atv_covar; 
A5202|S182| 
A5202|S183|1 
A5202|S184| 

としてそれらを維持したいヌルに非一致する行のためatv_covar.noncomp変化することです。

答えて

0

@Dan、クエリの問題はSQLiteに固有の問題ではありません。 atv_covarのすべての行を更新していますが、それらのすべてがに対応しているわけではないため、これらのデフォルトはNULLです。更新をフィルタリングするか、デフォルト値を指定する必要があります。

次のステートメントは、1のみのフィルタリング条件をmacth行に設定する:

UPDATE atv_covar 
SET noncomp = 1 
WHERE EXISTS (
    SELECT 'x' 
    FROM f4003 
    WHERE atv_covar.study = f4003.study 
     AND atv_covar.rpid = f4003.rpid 
     AND (rsoffrx="81" or rsoffrx="77") 
); 

次の文は、(2つの代わりにこれを使用してフィルタリング一致に応じて、noncompのすべての行の1又は2を設定しますアップデート:

UPDATE atv_covar 
SET noncomp = COALESCE((
    SELECT 1 
    FROM f4003 
    WHERE atv_covar.study = f4003.study 
     AND atv_covar.rpid = f4003.rpid 
     AND (rsoffrx="81" or rsoffrx="77") 
), 2); 
関連する問題