2016-05-20 14 views
-2

これは簡単な質問かもしれませんが、私は本当にこれに固執しています。MySQLの同じ列から異なる値を挿入してください

INSERT INTO `DB`.`converted_values` (`type`,`old_value`, `new_value`) 
      SELECT 'USER_ID',`users`.`id` AS _OLD , `users`.`id` as _NEW 
      FROM `DB`.`users` 
      WHERE _OLD IN (SELECT `id` FROM `DB`.`users` WHERE `level`=ORIGINAL_LEVEL) 
      AND _NEW IN (SELECT `id` FROM `DB`.`users` WHERE `level`=NEW_LEVEL); 

levelが一意でないと、N個の結果を返すことがありますが、_OLD_NEWのための行の同じ数:

私はこの文のようなものを必要としています。

type | old_value | new_value 
USER_ID | 8   | 500 
USER_ID | 17  | 507 
USER_ID | 60  | 521 
USER_ID | 81  | 890 

ありがとう:

最終的な結果は次のようなものでなければなりません。

+0

を使用していないしてみ? – JYoThI

+0

ユーザテーブルの説明にサンプルデータを公開できますか? –

答えて

0

あなたはトリガーをやろうとしてエイリアス

 INSERT INTO `DB`.`converted_values` (`type`,`old_value`, `new_value`) 
     SELECT distinct 'USER_ID',`users`.`id` , `users`.`id` 
     FROM `DB`.`users` 
     WHERE `users`.`id` IN (SELECT `id` FROM `DB`.`users` WHERE `level`=ORIGINAL_LEVEL) 
     AND `users`.`id` IN (SELECT `id` FROM `DB`.`users` WHERE `level`=NEW_LEVEL); 
+0

ここで(のような)必要性が分かっているかもしれませんか? – JYoThI

+0

ありがとうございますが、これは役に立ちません。 エイリアスは目的を説明するためのものです。あなたの提案を実行すると、各列の重複した値が取得されます。私はGROUP BYを試みましたが、mysqlはエラーコード:1055について文句を言います。SELECTリストの式#2はGROUP BY句ではなく、GROUP BY句のカラムに機能的に依存しない非集約カラムを含んでいます。これはsql_mode = only_full_group_byと互換性がありません。 –

+0

は、タイプミスで値が重複しています(奇妙なことに、エイリアスを削除するとクエリセットが変更されません)。別名を使用してグループ化しないでください...回答を更新しました – scaisEdge

0
/* 
drop table users; 
CREATE TABLE users 
(user_id VARCHAR(6),LEVEL VARCHAR(20), id INT); 
truncate table users; 
INSERT INTO users 
VALUES 
('USER-1','ORIGINAL' , 8), 
('USER-2','ORIGINAL' , 17), 
('USER-3','ORIGINAL' , 60), 
('USER-4','ORIGINAL' , 61), 
('USER-1','NEW' , 500), 
('USER-2','NEW' , 507), 
('USER-3','NEW' , 521), 
('USER-1','NEW' , 600) 
; 
*/ 

select u1.user_id,u1.id 'Old', u2.id 'New' 
from users u1 
join users u2 on u2.user_id = u1.user_id 
where u1.id IN (SELECT MIN(id) FROM users WHERE level = 'ORIGINAL' and user_id = u1.user_id) 
    AND u2.id IN (SELECT MAX(id) FROM users WHERE level = 'NEW' and user_id = u2.user_id) 
order by u1.user_id 
関連する問題