2016-05-20 2 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

Try не используя псевдоним

 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. Выражение # 2 списка SELECT не находится в предложении GROUP BY и содержит неагрегированный столбец, который функционально не зависит от столбцов в предложении GROUP BY; это несовместимо с sql_mode = only_full_group_by –

+0

Как и опечатка и для дублирования значения (странный beacuse удаление псевдонима не меняет набор запросов) использовать разные, не группировать по ... я обновил ответ – 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 
Смежные вопросы