2017-01-20 3 views
1

У меня table_1 с уникальными записями идентификаторов и нескольких столбцов данныхОбъединение нескольких столбцов в table1 с несколькими столбцами в table2 с дополнительным условием MySql

и

table_2 с несколькими рядами относительно конкретного идентификатора и несколько столбцов. Один из столбцов в table2, скажем, time_lapse.

Мне нужны эти две таблицы, объединенные со всеми сохраненными столбцами, но только с теми строками от table2 с наивысшим значением time_lapse.

Я пытался таким образом ...

create table as new_table 
select table1.*, table2.* from 
table1 left join table2 
on table1.id=table2.id 
where time_lapse= 
(select max(time_lapse) from table2 
group by id); 

... но это не удалось.

Любые предложения для новичков? Спасибо.

+2

Добро пожаловать на Stack Overflow. Вы должны знать, что «но это не удалось» не очень описательный способ описать вашу проблему. Выдало ли сообщение об ошибке? Если да, то в чем была ошибка? Не было ли у него ошибок, но не дал результата, которого вы ожидали? Если да, чего вы ожидали и что он сделал вместо этого? Кроме того, каков результат 'SHOW CREATE TABLE' для каждой таблицы? Помогите нам помочь. –

+0

Что такое первичный ключ 'table2'? Отправьте схему, как предложил Билл. –

+0

Поскольку фактический стол был довольно весомым, я решил опубликовать вопрос, основанный на упрощенной замене «манекена». Что касается исходных таблиц, то в таблице 1 есть только один первичный ключ (id), а первичный ключ в таблице2 вообще отсутствует. Я новичок в поле, поэтому извините за мою неуклюжесть. Ответ @Thorsten Kettner оказался безупречным. –

ответ

0

Вы близко. Но вы выбираете максимум time_lapse за id, а затем вы действуете так, как будто вы выбрали только одну запись только с одним time_lapse. Используйте IN и имеет id в списке выбора вашего подзапроса:

create table as new_table 
select table1.*, table2.* from 
table1 left join table2 
on table1.id=table2.id 
where (table2.id, table2.time_lapse) in 
(select id, max(time_lapse) from table2 
group by id); 

Тогда вы внешнее присоединение таблица2, но хотите определенные критерии, на нем в пункте WHERE. Это не работает (поскольку столбцы во внешних смежных записях являются нулевыми).

Тот же самый запрос чуть симпатичнее с реальным внешним соединением:

create table as new_table 
select t1.*, t2.* 
from table1 t1 
left join table2 t2 on t1.id = t2.id 
        and (t2.id, t2.time_lapse) in 
         (select id, max(time_lapse) from table2 group by id); 

 Смежные вопросы

  • Нет связанных вопросов^_^