SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 16.09.2013 17:19:24

Tuymurod
Участник
Зарегистрирован: 16.09.2013
Сообщений: 5

Повторяющиеся значения в несколько таблицах

У меня 15 таблиц с одиноками столбцами.
Подскажите пожалуйста:
1. как найти повторяющиеся значения из этих таблицах?
2. как найти похожие значения (тексты) из этих таблицах?

БОЛЬШОЕ спасибо!

Неактивен

 

#2 16.09.2013 17:47:32

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Повторяющиеся значения в несколько таблицах

Повторяющиеся в рамках одной таблицы или общие для всех 15и таблиц?

P.S. Не дублируйте темы.

Неактивен

 

#3 17.09.2013 13:27:44

Tuymurod
Участник
Зарегистрирован: 16.09.2013
Сообщений: 5

Re: Повторяющиеся значения в несколько таблицах

Повторяющиеся в общие для всех 15и таблиц (Может быть в одном или в других)

Например:
table1(id, name, adress, ...), table2(id, name, adress, ...), table3(id, name, adress, ...), table4(id, name, adress, ...), .... table15(id, name, adress, ...)

table1([1,Anya,Rossiya,...],[2,Sasha,Rossiya,...],....)
table2([1,Vanya,Ukraina,...],[2,Andrey,Rossiya,...],....)
table3([1,Sergey,Polsha,...],[2,Anya,Ukraina,...],[3,Anya,Chexiya,...],....)
.
.
.

Мне нужен:
table1 1-Anya
table3 2-Anya
table3 3-Anya


Или хорошо была бы, если можно найти похожие .... Например:
table1 1-Anya
table2 1-Vanya
table3 2-Anya
table3 3-Anya

Здесь Anya и Vanya похоже друг на другом.

Как этого можно сделать? Спасибо вам за внимание!

tuymurod@mail.ru

Отредактированно Tuymurod (17.09.2013 13:47:07)

Неактивен

 

#4 17.09.2013 15:34:31

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Повторяющиеся значения в несколько таблицах

Можно написать очень большой запрос.
Для 3ех таблиц это будет выглядеть так:


select distinct 'table1', t1_id id, t1_name name from
(select t1.id t1_id, t1.name t1_name, t2.id t2_id, t2.name t2_name
from table1 t1 join table2 t2
on t1.name=t2.name) t
union
select distinct 'table2', t2_id, t2_name from
(select t1.id t1_id, t1.name t1_name, t2.id t2_id, t2.name t2_name
from table1 t1 join table2 t2
on t1.name=t2.name) t
union
select distinct 'table1', t1_id, t1_name from
(select t1.id t1_id, t1.name t1_name, t3.id t3_id, t3.name t3_name
from table1 t1 join table3 t3
on t1.name=t3.name) t
union
select distinct 'table3', t3_id, t3_name from
(select t1.id t1_id, t1.name t1_name, t3.id t3_id, t3.name t3_name
from table1 t1 join table3 t3
on t1.name=t3.name) t
union
select distinct 'table2', t2_id, t2_name from
(select t2.id t2_id, t2.name t2_name, t3.id t3_id, t3.name t3_name
from table2 t2 join table3 t3
on t2.name=t3.name) t
union
select distinct 'table3', t3_id, t3_name from
(select t2.id t2_id, t2.name t2_name, t3.id t3_id, t3.name t3_name
from table2 t2 join table3 t3
on t2.name=t3.name) t
order by 3
;


Для 15ти явно проще будет это написать через хранимую процедуру, которая будет попарно сравнивать все таблицы.

Неактивен

 

#5 17.09.2013 15:51:19

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Повторяющиеся значения в несколько таблицах

Неактивен

 

#6 17.09.2013 17:49:30

Tuymurod
Участник
Зарегистрирован: 16.09.2013
Сообщений: 5

Re: Повторяющиеся значения в несколько таблицах

Я магу обобщать все 15 таблиц в одном (только они отличаются друг с другом по категорию).
Мне интересно если я объединяю таблицы скорость работа изменяется или нет?
На каком варианте можно легче найти, из 15и или из одно большего?

Неактивен

 

#7 17.09.2013 19:37:42

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Повторяющиеся значения в несколько таблицах

Да, вы правы через union будет гораздо проще (что-то я пошел сложным путем)

select t2.* from (
select name from (
select name from table1
union all
select name from table2
union all
select name from table3) t
group by name having count(*)>1
) t1
join (
select 'table1', id, name from table1
union all
select 'table2', id, name from table2
union all
select 'table3', id, name from table3
) t2 on t1.name=t2.name

Легко расширить данный запрос до 15ти таблиц.
Если будет одна таблица с индексом по name, то запрос будет работать гораздо быстрее.

Неактивен

 

#8 17.09.2013 20:04:09

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Повторяющиеся значения в несколько таблицах

Кстати, последний вариант найдет и те имена, которые повторяются только в рамках одной таблицы. Если их нужно исключить, то группировку нужно делать по имени и таблице.

Неактивен

 

#9 18.09.2013 08:35:45

Tuymurod
Участник
Зарегистрирован: 16.09.2013
Сообщений: 5

Re: Повторяющиеся значения в несколько таблицах

Спасибо вам за советы! Мне был очень полезно.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson