-1

次の SELECT クエリは正常に機能します。

select
    StringField_1
    , StringField_2
    , StringField_3
    , COUNT(*)
from my.table
where StringField_1 in (
    select StringField_1
    from my.table
)
group by
    StringField_1
    , StringField_2
    , StringField_3
having
    COUNT(*) > 10
    and StringField_3 like '.*some_string_here.*'
;

結果:

|StringField_1  | StringField_2 | StringField_3 |
|-------------- | ------------- | ------------- |

(影響を受ける行は 0 行)

しかし、上記の出力を含む UPDATE は失敗します。

update my.table
set
    StringField_1 = 'CLEAR'
    , numField_1 = 0
where StringField_1 in (
    select
        StringField_1
        , StringField_2
        , StringField_3
        , COUNT(*)
    from my.table
    where StringField_1 in (
        select StringField_1
        from my.table
    )
    group by
        StringField_1
        , StringField_2
        , StringField_3
    having COUNT(*) > 10 and StringField_3 like '.*some_string_here.*'
);

次のエラーが発生します。

エラー=不正です 選択リストには、文 'update my.table set StringField_1 = 'CLEAR', numField= 0 の 3 行目に集約式と列式の両方を含めてはなりません。 my.table where StringField_1 in (select StringField_1 from my.table) group b...', at or near 'group'

手がかりはありますか?

4

3 に答える 3

0

そのようなサブクエリで複数の列を返すことはできません。また、以下を使用する必要はありません。

where StringField_1 in (select StringField_1 from my.table) 

代わりに次のようにしてみてください。

update my.table
set StringField_1 = 'CLEAR', 
    numField_1 = 0
where StringField_1 in (
    select StringField_1
    from my.table 
    group by StringField_1, StringField_2, StringField_3 
    having count(*) > 10 
        and StringField_3 like '.*some_string_here.*'
)
于 2013-07-09T13:55:09.227 に答える
0

サブクエリは単一の列 (StringField_1) のみを返す必要があります

また、where StringField_1 in (select StringField_1 from my.table)冗長です。必要ありません。

where StringField_3 like '.*some_string_here.*'また、集計する行が少なくなることを意味するため、where 句に移動しましたが、結果は同じである必要があります..

update my.table 
set StringField_1 = 'CLEAR', numField_1 = 0 
where StringField_1 in 
(
 select distinct StringField_1
 from my.table 
 where StringField_3 like '.*some_string_here.*'
 group by StringField_1, StringField_2, StringField_3 
 having COUNT(*) > 10 
);
于 2013-07-09T13:58:01.567 に答える