0

私の MySQL の知識はかなり基本的なもので、複雑なクエリに苦労しています。私にとって、次の問題は複雑です。

ビジネスをデータベースにインポートしていますが、その中には同じ会社名を持つものもあります。たとえば、テーブルには 2 つの Subway 支店があり、どちらも住所が異なります。

Company Name を「Company Name」+「Town」に設定したいので、一意のフィールドになります。

  • 地下鉄ロンドン
  • 地下鉄マンチェスター

これまでのところ、データベースに 2 回表示される会社名を次のようにチェックするだけです。

SELECT CompanyName , count( CompanyName )
FROM directorydata
GROUP BY CompanyName 
HAVING count( CompanyName ) >1

CompanyName フィールドのそれぞれを現在の値と Town フィールドの値で更新するにはどうすればよいですか?

あなたの助けは大歓迎です!

4

1 に答える 1

0
UPDATE directoryData 
   SET CompanyName = CONCAT(CONCAT(CompanyName, ' '), Town)
 WHERE CompanyName in (
                    SELECT CompanyName 
                      FROM directoryData
                      GROUP BY CompanyName
                      HAVING count(CompanyName)>1
                      )

編集:MySQL#1093-によると、その通りです-FROM句で更新のターゲットテーブル'giveaways'を指定することはできません。更新によって、whereでチェックされた値が変更されるとエンジンが破損する可能性があります(最初のSubwaysレコードを更新します。次に、2番目はcount()> 1句と一致しなくなります...)

次に、別の方法を試してみましょう。

UPDATE directoryData 
   SET CompanyName = (
         CASE WHEN (
                    SELECT count(CompanyName) 
                      FROM directoryData
                      GROUP BY CompanyName
                      HAVING count(CompanyName)
                   )
              >1
              THEN CONCAT(CONCAT(CompanyName, ' '), Town)
              ELSE CompanyName
              END
         )

私はそれを試すことができません、私はこれを手でここに書きました、それが役立つことを願っています...

編集2:

1回限りのタスクに2つのテーブルを使用する(以前のソリューションはMySqlでは機能しないため):

UPDATE directoryData 
   SET CompanyName = CONCAT(CONCAT(CompanyName, ' '), Town)
 WHERE CompanyName in (
                    SELECT CompanyName 
                      FROM directoryData_CLONED
                      GROUP BY CompanyName
                      HAVING count(CompanyName)>1
                      )
于 2012-10-22T10:07:23.813 に答える