1

私が次のものを持っていると仮定します:

tableA

id (auto increment primary key) | age | country
1 | 5 | Germany
2 | 6 | Spain
3 | 7 | France
4 | 7 | Spain
5 | 8 | France
6 | 9 | France
7 | 2 | Mexico
8 | 7 | Saudi Arabia
9 | 5 | Saudi Arabia

結果のテーブルが必要です:

tableA

id (auto increment primary key) | age | country | country_number
1 | 5 | Germany | 1
2 | 6 | Spain | 2
3 | 7 | France | 3
4 | 7 | Spain | 2
5 | 8 | France | 3
6 | 9 | France | 3
7 | 2 | Mexico | 4
8 | 7 | Saudi Arabia | 5
9 | 5 | Saudi Arabia | 5

「country_number」は、一意の国名に基づく一意の番号であることに注意してください。

カーソルの使用は遅いです。ある種の「groupby」を実行できるようにするにはどうすればよいですか?国ごとに一意の識別子を割り当てるには?または、group byは必要ありませんか?

4

2 に答える 2

2

クエリは次のようになります(サウジアラビアの場合は5はありませんが、国ごとに少なくとも異なるcountry_numberがあります)

select a.id, a.age, a.country, b.minId as country_number
FROM TableA a
INNER JOIN (SELECT MIN(id) as minId, country
            FROM TableA
            GROUP BY country) as b
      ON a.country = b.country

SqlFiddle

物事を適切に行うために、

CREATE TABLE COUNTRY(id int PRIMARY KEY auto_increment, name VARCHAR(100))
SELECT distinct COUNTRY as name FROM TableB;

ALTER TABLE TableB Add column countryID int NOT NULL DEFAULT 0;

UPDATE TableB b, country c
set b.countryID = c.Id
where b.country = c.name;

ALTER TABLE TableB drop column country;

ALTER TABLE TableB add  FOREIGN KEY(countryID) REFERENCES country(id); 

SqlFiddleを参照してください

于 2013-02-06T22:47:18.787 に答える
1

国を格納するための別のテーブルを作成してから、国の主キー(country_id)を外部キーとして現在のテーブルに格納する必要があります。

于 2013-02-06T22:47:16.400 に答える