2015-06-17 3 views
0

У меня есть 2 таблицы в одной базе данных.Объединить две таблицы в одну и удалить дубликаты

Я хочу объединить их на основе общего столбца id. Поскольку таблицы слишком велики, я не уверен, есть ли дубликаты.

Как можно объединить эти две таблицы в один на основе id и быть уверенным, что дубликатов нет?

SELECT * 
FROM table1,table2 
JOIN 
GROUP BY id 
+0

Есть ли у них такая же структура? Если это так, используйте 'UNION'. –

+1

@ PM77-1 Нет, у кого есть 4 столбца, а остальные 12 – angs

+1

. Что именно вы подразумеваете под «* merge *»? Просьба представить некоторые примеры данных и желаемый результат. –

ответ

0

Я не уверен, что именно вы хотите, но в любом случае, это ваш код

SELECT * 
FROM table1,table2 
JOIN 
GROUP BY id 

я просто изменить запрос

SELECT * 
FROM table1 JOIN table2 
on table2.id = table1.id 
GROUP BY table1.id // here you have to add table 
//on which you will be group by at this moment this is table1 
0

Что вы подразумеваете под слиянием двух таблиц? Вам нужны записи и столбцы из таблиц или столбцов из одного и записи из обоих? В любом случае вам нужно будет изменить предложение соединения.

Вы могли бы сделать присоединиться к столбцам вы хотите

SELECT DISTINCT * 
    FROM table1 tb1 
    JOIN table2 tb2 
    ON table1.id = table2.id 

Теперь, если вы хотите столбцы только table1 сделать LEFT JOIN Если вы хотите столбцы только TABLE2 то RIGHT JOIN Если вы хотите столбцы из обеих таблиц, используйте запрос как есть. DISTINCT гарантирует, что вы получите только одну строку, если есть несколько строк с одинаковыми данными (но этот отчет будет проверять значения для всех столбцов в строке, независимо от того, являются они разными или одинаковыми) Союз не поможет, если обе таблицы имеют разное количество столбцов. Если вы не знаете, о присоединяется затем использовать декартово произведение

select distinct * 
    from table1 tb1, table2 tb2 
where tb1.id = tb2.id 

Где идентификатор столбца, который является общим между таблицами. Вот если вы хотите столбцы только table1 сделать

select distinct tb1.* 

Аналогичным образом замените ТВ1 на ТВ2 в вышеупомянутом заявлении, если вы просто хотите TABLE2 столбцов.

select distinct tb2.* 

Если вы хотите смещ_по_столбцам от обоих просто написать «*»

В обоих случаях И.Э. соединения и продукты, упомянутые выше, если вам нужны выборочные столбцы, просто напишите псевдоним таблицы. Например. Рассмотрим: table1 имеет идентификатор, Foo, бар в виде столбцов table2 имеет идентификатор, имя, раскатать нет, возраст

вы хотите только идентификатор, Foo, имя из обеих таблиц в выберите результат запроса сделать это:

select distinct tb1.id, tb1.foo, tb2.name 
    from table1 tb1 
    join table2 tb2 
    on tb1.id=tb2.id 

То же относится и к декартовому запросу продукта. tb1, tb2 называются BTW в качестве псевдонимов таблицы.

Если вы хотите данные из обеих таблиц, даже если они не имеют ничего общего просто сделать

select distinct * 
    from table1 , table2 

Обратите внимание, что это не может быть достигнуто с помощью объединения, как присоединиться требует общего столбца, чтобы присоединиться к «на»

+0

только одна вещь, которую я не думаю, что ты запрашивают SELECT * FROM table1 , table2 РЕГИСТРИРУЙТЕСЬ GROUP BY ид будет работать. GROUP BY работает с совокупными функциями, например. счет, сумма, макс, мин и т. д., например. select count (emp_name), emp_sal, emp_age от сотрудника группа emp_sal, emp_age; здесь это не применяется. Следовательно, нельзя использовать группу. Вместо этого используйте join – Proxima

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