1

WITH句を使用してテーブルを更新したい。やってみた:

UPDATE mytable 
SET myfield = (
   WITH sub AS (SELECT 18) 
   SELECT CASE WHEN (sub = 18) THEN 100 ELSE 0 END)

WITH sub AS (SELECT 18)
UPDATE mytable 
SET myfield = ( 
   SELECT CASE WHEN (sub = 18) THEN 100 ELSE 0 END)

しかし、うまくいきません。私が間違っていることを説明してください。

4

3 に答える 3

1

あなたsubは列ではなくレコードセットです。これは機能します:

with sub(col) as (select 18)
update mytable set
   myfield = (select case when col = 18 then 100 else 0 end from sub)

ただし、すべての行が 100 で更新さmytableれます。クエリで何をしたいのかわからないので、これ以上正確にはできません。

于 2013-11-05T17:12:52.517 に答える
0

WITH 句は「共通テーブル式」を定義し、後続のクエリでテーブルとして扱われます。したがって、テーブルと同じように、後続のクエリで共通テーブル式の名前を参照する必要があります。複雑な式でソースが何であるかを明確にするために、CTE 名の前に cte_ を付ける方が明確です。データは。

update mytable 
set    myfield = (
         with cte_sub as
           (select 18 as field) 
         select case field
                  when 18 then 100
                  else 0
                end
         from cte_sub)
于 2013-11-05T17:08:31.037 に答える
0
UPDATE mytable 
SET myfield = (
   WITH sub AS (SELECT 18 AS field) 
   SELECT CASE WHEN (field = 18) THEN 100 ELSE 0 END
   FROM sub)
于 2013-11-05T16:46:14.070 に答える