2011-07-02 16 views
2

私は間違っているデータがあるテーブルを用意しています。以下はその例です:MYSQL同じテーブル内からの更新

TABLE-A 
id, type, value 
1, 10, 123456 
2, 10, NULL 
3, 10, NULL 
4, 20, 123456 
5, 20, 654321 
6, 20, NULL 

私はMYSQLの更新コマンドが必要です。

「type」は、値がNULLで、「値」は、テーブルに

UPDATE table-a SET value = (...)

とてもユニークであるとして、それは限り同じであるので、「値」を更新同じである場合id 23の値は、123456に更新されます。

id 6は、同じ「タイプ」に対して「値」が一意ではないため、更新されません。

+0

ID」の値がどうあるべきか上記の例では6が123456または654321に更新されるため、 – WordsWorth

+0

更新しないでください。手動で更新する必要があります。 –

+0

私はあなたが単一のクエリでそれを行うことをお勧めしません。単一のクエリは複雑な可能性があります。PHPや他の言語を使用して、あなたは働いています。 – WordsWorth

答えて

4
UPDATE TABLE_A t 
     JOIN 
      (SELECT type 
        , MIN(value) AS value 
      FROM TABLE_A 
      GROUP BY type 
      HAVING COUNT(DISTINCT value) = 1 
      ) AS tu 
     ON tu.type = t.type 
SET t.value = tu.value 
WHERE t.value IS NULL 

PeufeuがDISTINCTはあまりにも、私は、ID = 3の行を更新する必要があるとし、この1のようなケースをキャッチするために必要とされる、指摘したように:

TABLE-A 
id | type | value 
1 | 10 | 123456 
2 | 10 | 123456 
3 | 10 | NULL 
4 | 20 | 123456 
5 | 20 | 654321 
6 | 20 | NULL 
+1

count(value)はここで間違っています:あなたが意味するcount(DISTINCT値)を意味します。 – peufeu

+0

@peufeu:ええ、私は 'COUNT(DISTINCT値)'がより正しいと思います。ある型に対して全く同じ値を持つ2つ以上の行があり、他のすべての行がNULLの場合をキャッチします。 Thnx。 –

+0

は私の例でうまくいきます、ありがとう。しかし、テーブルに7,30,123456 8,30,123456 9,30、NULLがある場合、ID 9は –

関連する問題