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

0

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

<table style="height: 234px;" width="735">
<tbody>
<tr>
<td style="width: 114px;"><span style="text-decoration: underline;"><strong>First name</strong></span></td>
<td style="width: 114px;"><span style="text-decoration: underline;"><strong>Last Name</strong></span></td>
<td style="width: 116px;"><span style="text-decoration: underline;"><strong>Main Phone</strong></span></td>
<td style="width: 117px;"><span style="text-decoration: underline;"><strong>Work Phone</strong></span></td>
<td style="width: 117px;"><span style="text-decoration: underline;"><strong>Mobile 1</strong></span></td>
<td style="width: 117px;"><span style="text-decoration: underline;"><strong>Mobile 2</strong></span></td>
</tr>
<tr>
<td style="width: 114px;">Jon</td>
<td style="width: 114px;">Smith</td>
<td style="width: 116px;">77777777</td>
<td style="width: 117px;">50505050</td>
<td style="width: 117px;">&nbsp;</td>
<td style="width: 117px;">&nbsp;</td>
</tr>
<tr>
<td style="width: 114px;">J&nbsp;</td>
<td style="width: 114px;">Smith</td>
<td style="width: 116px;">&nbsp;</td>
<td style="width: 117px;">&nbsp;</td>
<td style="width: 117px;">&nbsp;</td>
<td style="width: 117px;">&nbsp;</td>
</tr>
<tr>
<td style="width: 114px;">John&nbsp;</td>
<td style="width: 114px;">Smith</td>
<td style="width: 116px;">50505050</td>
<td style="width: 117px;">&nbsp;</td>
<td style="width: 117px;">&nbsp;</td>
<td style="width: 117px;">&nbsp;</td>
</tr>
<tr>
<td style="width: 114px;">J Smith</td>
<td style="width: 114px;">&nbsp;</td>
<td style="width: 116px;">&nbsp;</td>
<td style="width: 117px;">77777777</td>
<td style="width: 117px;">&nbsp;</td>
<td style="width: 117px;">50505050</td>
</tr>
<tr>
<td style="width: 114px;">Jane</td>
<td style="width: 114px;">Smith</td>
<td style="width: 116px;">&nbsp;</td>
<td style="width: 117px;">&nbsp;</td>
<td style="width: 117px;">&nbsp;</td>
<td style="width: 117px;">77777777</td>
</tr>
<tr>
<td style="width: 114px;">J</td>
<td style="width: 114px;">Doe</td>
<td style="width: 116px;">65656565</td>
<td style="width: 117px;">&nbsp;</td>
<td style="width: 117px;">&nbsp;</td>
<td style="width: 117px;">33333333</td>
</tr>
<tr>
<td style="width: 114px;">Jessica</td>
<td style="width: 114px;">Doe</td>
<td style="width: 116px;">&nbsp;</td>
<td style="width: 117px;">33333333</td>
<td style="width: 117px;">65656565</td>
<td style="width: 117px;">&nbsp;</td>
</tr>
</tbody>
</table>

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

    Select firstname, lastname, mainPhone, count(mainPhone), workPhone,count(businessPhone), mobile1Phone, count(mobilePhone)  , mobile2Phone, count(mobile2Phone)  
from employeeTable
group by mainPhone, businessPhone, mobile1Phone, mobile2Phone
having 
(count(mainPhone) > 1) or (count(businessPhone) > 1) or (count(mobile2Phone) > 1) or (count(mobile2Phone) > 1);
  • 0
    Вы должны добавить код для создания вашей таблицы и для заполнения ее тестовыми данными. Хорошо, что вы дали свой ошибочный запрос, но «безуспешно» не говорит о многом. Я предполагаю, что если бы это было успешно, вы бы не разместили этот вопрос. Это возвращает ошибку? Разве это не дает ожидаемый результат? Предоставление более подробной информации поможет кому-то помочь вам.
  • 0
    В тестовом образце я вижу визуально повторяющиеся номера телефонов. Однако когда я запускаю код, я получаю 0 возвращаемых строк.
Теги:

1 ответ

1
Лучший ответ

Вы могли бы попробовать что-то подобное.

SELECT
  phone,
  GROUP_CONCAT('uniqueKey') AS 'uniqueKeys',
  COUNT(*)
FROM
  (
  SELECT
    id AS 'uniqueKey',
    'mainPhone' AS source,
    mainPhone AS 'phone'
  FROM
    employeeTable

  UNION

  SELECT
    id AS 'uniqueKey',
    'businessPhone' AS source,
    businessPhone AS 'phone'
  FROM
    employeeTable

  UNION

  SELECT
    id AS 'uniqueKey',
    'mobile1Phone' AS source,
    mobile1Phone AS 'phone'
  FROM
    employeeTable

  UNION

  SELECT
    id AS 'uniqueKey',
    'mobile2Phone' AS source,
    mobile2Phone AS 'phone'
  FROM
    employeeTable
  ) AS subquery1
GROUP BY phone

Сначала с различными утверждениями, связанными с UNION вы создаете нечто вроде вида транспондера. Это можно сгруппировать и подсчитать. Я предположил, что существует какой-то уникальный или первичный ключ, такой как идентификатор или логин или аналогичный.

  • 0
    Большое спасибо Даниэль, ваша идея сработала так, как рекламируется Я внес небольшие поправки, чтобы игнорировать пустые телефонные номера и сохранять результаты, в результате чего количество событий превышает 2. [tag] AS подзапрос1 ГДЕ телефон не равен нулю GROUP BY phone HAVING count (*)> 1; [/ tag] Единственная проблема в том, что у Джона Смита один и тот же номер телефона под основным и мобильным телефонами, я бы хотел игнорировать его как дубликат в этом поиске. У Вас есть какие-то предложения?
  • 0
    Сначала вы могли бы выполнить SELECT DISINCT * FROM (...) AS subquery1 а вокруг этого оператора - GROUP BY . Я не думаю, что это очень хороший подход. Если ваша таблица станет больше, два параллельных подзапроса окажут влияние, которое ухудшается с учетом количества записей.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню