2

私は次のシナリオを持っています:Xフィールドがどこにあるかを言うテーブルがあります

 -------------------------
 | City      | Country   |
 ------------------------|
 | Melbourne | Australia |
 | Phoenix   | USA       |
 | Manchester| USA       |
 | Manchester| UK        |
 | Phoenix   | USA       |
 | Pune      | India     |
 ------------------------

同じ場合と異なるcity場合にのみ列を更新しようとしています。私はやってみましたcitycountry

UPDATE X SET ( City) = CONCAT( CITY, COUNTRY) WHERE = ?

where句は何ですか?

編集:

出力は次のようになります

 ------------------------------
 | City           | Country   |
 -----------------------------|
 | Melbourne      | Australia |
 | Phoenix        | USA       |
 | Manchester, USA| USA       |
 | Manchester, UK | UK        |
 | Phoenix        | USA       |
 | Pune           | India     |
 ------------------------------
4

4 に答える 4

1
UPDATE X SET (City) = CONCAT(CITY,', ',COUNTRY) 
WHERE CITY IN 
    ( 
    SELECT tmp.City FROM 
        (SELECT DISTINCT x2.City, x2.Country FROM X AS x2) AS tmp 
    GROUP BY tmp.City HAVING COUNT(1) > 1 
    )
于 2012-11-15T13:36:42.660 に答える
1
UPDATE X inner join X X_1 on X.city = X_1.city
SET X.City=CONCAT(X.city, ', ', X.Country)
WHERE X.country <> X_1.country

これCONCAT(X.city, ', ', X.Country)により、同じ都市名が複数の国に存在する場合にのみ、都市名が設定されます。

編集:私はこの他のバージョンを好むと思います:

UPDATE
  X inner join
  (select city from X group by city having count(*)>1) X_dup
  on X.city = X_dup.city
SET X.City=CONCAT(X.city, ', ', X.Country)

サブクエリでテーブルを参照している場合、MySql ではテーブルを更新できないため、これらすべての奇妙な結合を使用しています。

于 2012-11-15T13:33:49.477 に答える
0

City次のようなクエリで、重複するすべての町を取得できます。

SELECT City, COUNT(City) AS Count
FROM X
GROUP BY City
HAVING Count > 1

条件 (1 つの列のみ) で使用するのが最も簡単なINので、これをカプセル化します。

SELECT City
FROM (
    SELECT City, COUNT(City) AS Count
    FROM X
    GROUP BY City
    HAVING Count > 1
) AS t1

同じテーブルの更新中にネストされたテーブル選択を使用しようとするとmysqlが機能しないため、すべてのデータを一時テーブルにプッシュする必要があります。

CREATE TEMPORARY TABLE tmp (VARCHAR(255) city);
INSERT INTO tmp (
    SELECT City
    FROM (
        SELECT City, COUNT(City) AS Count
        FROM X
        GROUP BY City
        HAVING Count > 1
    ) AS t1
)

そして今、更新を開始することができます:

UPDATE X SET (City) = CONCAT(CITY,COUNTRY)
WHERE `City` IN (SELECT City FROM tmp);
于 2012-11-15T13:43:02.477 に答える
0

使用してみてください:

GROUP_CONCAT()

グループの非 NULL 値を連結した文字列結果を返します

http://www.mysqlperformanceblog.com/2006/09/04/group_concat-useful-group-by-extension/

于 2012-11-15T13:44:06.920 に答える