Интересный mysql запрос - PullRequest
       56

Интересный mysql запрос

0 голосов
/ 18 апреля 2020

У меня есть 2 разные таблицы.

Моя цель - найти людей, которые используют один и тот же IP-адрес с разными именами.

Таблица 1 - журналы

Поля: member_id , ip_adress

Таблица 2 - члены

Поля: id, имя, фамилия

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

Для этого вы можете использовать GROUP_CONCAT:

SELECT
    ip_adress, GROUP_CONCAT(name)
FROM table1
LEFT JOIN
    table2 ON table1.member_id = table2.id
GROUP BY
    ip_adress
0 голосов
/ 18 апреля 2020

В MySQL 8.x вы можете использовать ROW_NUMBER(), чтобы определить, какие IP-адреса имеют несколько членов.

Например:

select id, name, last_name
from (
  select m.*,
    row_number() over(partition by l.ip_address 
                      order by m.name, m.last_name) as rn 
  from members m
  join logs l on l.member_id = m.id 
) x
where rn = 2

РЕДАКТИРОВАТЬ MYSQL 5.7

Поскольку MySQL 5.x не имеет оконных функций, вы можете сделать:

select m.*
from members m
join logs l on l.member_id = m.id
where l.ip_address in (
  select l.ip_address
  from members m
  join logs l on l.member_id = m.id
  group by l.ip_address
  having min(m.name) <> max(m.name) or min(m.last_name) <> max(m.last_name)
)

См. Пример работы в DB Fiddle .

...