有趣的mysql查询

问题描述 投票:0回答:3

我有2个不同的表。

我的目标是找到使用相同IP地址但名称不同的人。

表1-日志

字段:member_id,ip_adress

表2-成员

字段:ID,名称,姓氏

join mysql-5.7
3个回答
0
投票

您可以使用GROUP_CONCAT:

SELECT
    ip_adress, GROUP_CONCAT(name)
FROM table1
LEFT JOIN
    table2 ON table1.member_id = table2.id
GROUP BY
    ip_adress

0
投票

@@ Deker @The Impaler

我有2个不同的表。

我的目标是找到使用相同IP地址但名称(姓和名)不同的人。

表1-成员

字段:ID,名称,姓氏

87-约翰-但是88-约翰-但是89-Alex-Lopez90-大卫-贝克汉姆

表2-日志

字段:member_id,ip_adress

87-1.1.1.188-1.1.1.189-2.2.2.290-2.2.2.2

我想要得到的结果

2.2.2.2-89,90-总计(2)

谢谢


0
投票

在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的Running Example。>>

© www.soinside.com 2019 - 2024. All rights reserved.