2012-03-10 18 views
0

基本的に同じタイプのデータを持つ4つの列がセットアップされています。すべての列のすべてのエントリのすべての一意のエントリから別のテーブルを作成したいとします。すべての列から1つの列にユニークに選択

C1 (Name1)   C2 (name2)   C3 (name3) 
R1 R1 C1 (John)  R1 C2 (Tiny Tim) R1 C3 (Big Sally) 
R2 R2 C1 (Big Sally) R2 C2 (john)  R2 C3 (Paul) 
R3 R3 C1 (Tiny Tim) R3 C2 (paul)  R3 C3 (rajesh) 
R4 R4 C1 (Normal Ned) R4 C2 (Big Sally) R4 C3 (Normal Ned) 

これは、私はあなたがUNIONキーワードを使用してそれを行うことができます

C1 
R1 John 
R2 Big Sally 
R3 Tiny Tim 
R4 Normal Ned 
R5 Rajesh 
R6 Paul 
+0

楽しい音。あなたの質問は何ですか? – Hamish

+0

これまでの質問を投稿できますか? –

+0

すべての列は同じテーブルにありますか? // DEV:表2 INTO – Starx

答えて

2

を必要とするものです。

SELECT c1 FROM table 
UNION 
SELECT c2 FROM table 
UNION 
SELECT c3 FROM table; 

結果は尋ねられます。

次に値を取得して新しいテーブルに挿入するか、 INSERT ... SELECTを使用してすばやく挿入します。

+0

INSERT( 'column2')VALUES(UNIONが表 FROM C2を選択 テーブル FROM C1をSELECT UNION、テーブルからC3を選択 ) これは、このリンク[リンク](HTTPを –

+0

チェック機能していません。 mysql.com/doc/refman/5.0/en/insert-select.html) – ChuyAMS

2

は、以下試してみてください。私は考えることができます

insert into newtablename 
    (
     select distinct uniquenames from (
      SELECT distinct c1 as uniquenames FROM tablename 
      UNION 
      SELECT distinct c2 as uniquenames FROM tablename 
      UNION 
      SELECT distinct c3 as uniquenames FROM tablename) 
    ) 
0

最速の方法は以下の通りです:UNIONは暗黙のうちにあなたにDISTINCTの結果を与え、達成するために発注して、一時的な操作を実行する使用

CREATE TABLE c_unique (c1 varchar(100 not null)); 
ALTER TABLE c_unique ADD UNIQUE INDEX (c1); 
INSERT IGNORE INTO c_unique(c1) SELECT c1 FROM table; 
INSERT IGNORE INTO c_unique(c1) SELECT c2 FROM table; 
INSERT IGNORE INTO c_unique(c1) SELECT c3 FROM table; 

この。 INSERT IGNOREを使用すると、UNIQUEインデックスに基づいてINSERT操作の行が拒否されます。

注: 文字列でUNIQUEを使用すると、特定の文字長で動作します。したがって、接頭辞の長さを指定する必要があります。あなたはここでそのテーマについてもっと読むことができます:CREATE INDEX構文

関連する問題