Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Запрос mysql (https://javascript.ru/forum/node-js-io-js/81335-zapros-mysql.html)

SpaceAlarm 11.11.2020 12:31

Запрос mysql
 
Добрый день товарищи, такой вопрос, есть nn количество таблиц в mysql которые содержат в себе два поля (id, number) в этих таблицах соответственно содержаться номера телефонов, и мне по запросу нужно со всех указанных таблиц вывести дубликаты ( совпадение номеров по всем указанным таблицам в запросе)
Сейчас я использую вот такой запрос:

SELECT one.number, two.number, fri.number, count(*) as count FROM one, two, fri
where one.number = two.number
and two.number = fri.number
GROUP BY one.number

One, two, fri, это название таблиц, мне кажется что этот запрос работает не правильно

laimas 11.11.2020 15:19

Сначала такой вопрос - почему дубликаты ищутся во множестве таблиц, если "регистрация" телефона в базе всегда в одной таблице, обычно это таблица параметров пользователей?

SpaceAlarm 11.11.2020 18:55

Цитата:

Сообщение от laimas (Сообщение 530656)
Сначала такой вопрос - почему дубликаты ищутся во множестве таблиц, если "регистрация" телефона в базе всегда в одной таблице, обычно это таблица параметров пользователей?

Таблицы собираются из exel файлов, а файлы exel собираются непосредственно по регионам, так вот мне нужно устанавливать пересечения номеров

laimas 11.11.2020 19:29

А почему вы это делаете после добавления в базу, да и даже так, почему у вас все это помещается в разные таблицы? Это какая-то аляпистая структура базы получается.

Не знаю что содержат эти файлы, но, пусть и разных сумок берутся списки и помещаются в базу, и структура этих файлов одинакова. То есть номер телефона из какой бы сумки он не взят, будет помещаться всегда в одну таблицу как один из параметров сущности описываемой этими списками из сумок. Достаточно полю телефон указать уникальный ключ и дубликат в базу не будет записан. А у вас как-то все кверху каком получается.

SpaceAlarm 12.11.2020 01:18

Я это конечно все понимаю, но у меня такая задача.... что нужно вот так делать... так какой запрос будет отрабатывать правильно?

laimas 12.11.2020 02:47

Какой-то кошмар ей богу. А дубликаты могут быть только между таблицами или и в каждой из таблиц могут быть тоже дубликаты?

SpaceAlarm 12.11.2020 10:45

Цитата:

Сообщение от laimas (Сообщение 530670)
Какой-то кошмар ей богу. А дубликаты могут быть только между таблицами или и в каждой из таблиц могут быть тоже дубликаты?

Дубликаты только между таблицами, в самих таблицах дубликатов нет

laimas 12.11.2020 16:34

Для того чтобы вывести дубликаты в таблице нужно использовать группировку, то есть запрос типа:
"SELECT COUNT(field_name) duplicate, CONCAT('tel-', field_name) duplicate_name  FROM  table_name WHERE GROUP BY duplicate_name ORDER BY duplicate"

Этот запрос вернет типа:
3 tel-77777777777
8 tel-99999999999
.....

Для того чтобы получить во всех таблицах их нужно соединить и поиск дубликатов искать в объединенной таблице по выше приведенному запросу, а CONCAT('tel-', field_name) duplicate_name, это нужно сформировать свое для каждой из таблиц при объединении.
Но нельзя отобразить в одной группе разные сущности, то есть, если в таблице А и в таблице В есть дубликаты, при этом в таблице А таких 5, а таблице В 10, при этом алиасы полей этих дубликатов различны, то это будет две группы с количеством 5 и 10 показывающие одни и те же номера. Но может это как раз и нужно.


Часовой пояс GMT +3, время: 07:22.