MySQL如何查询客户但在名字和姓氏匹配时跳过

标签 mysql join group-by self-join

MySQL

想象一家预付卡发行公司。

一个用户可以注册多次。

一个用户可以拥有多张卡。

CREATE TABLE users ( 
  id int primary key,
  govid varchar(255),
  firstname varchar(255),
  lastname varchar(255),
  address varchar(255)
);

CREATE TABLE card (
  id int primary key,
  cardnumber varchar(16), 
  balance int, 
  user_id integer
);

想要一个用户列表
1.有相同的govid
2.拥有10张以上卡
3.仅当名字和姓氏不匹配时

我的尝试:

select u.govid, count(*)
from card c
join users u on u.id=c.user_id
/*join users u2 on u2.id=u.id and u2.firstname<>u.firstname and u2.lastname<>u.lastname ?*/
group by u.govid
having count(*)>10

我不知道如何提出要求#3?

最佳答案

将原始表与拥有 10 张以上卡的用户连接起来,并检查名字和姓氏条件。

select u1.govid,u1.firstname,u1.lastname,u2.firstname,u2.lastname
from users u1 
join (select * from users
      where govid in (select u.govid
                      from users u
                      join card c on u.id=c.user_id
                      group by u.govid
                      having count(*)>10
                     ) 
      ) u2 on u1.govid = u2.govid
where u2.firstname<>u1.firstname and u2.lastname<>u1.lastname

关于MySQL如何查询客户但在名字和姓氏匹配时跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38798945/

相关文章:

php - 优化mysql全文搜索

mysql - 合并两个 MySQL 表,使用其中一个数据作为合并表中的表头

mysql - 以下 SQL 查询的正确解决方案是什么?

MYSQL按两个日期范围分组统计进行统计

mysql - 为什么此 GROUP BY 子句会导致此错误 "42000Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column..."?

php - 如何优化我的查询以免达到最大执行时间?

mysql - 重复更新不适用于唯一索引

mysql - Sphinx 为 mysql 主键自增 id 创建属性

mysql - 在 mysql 中,如何连接第二个表并获取具有最新日期的行?

mysql - 选择并加入 mysql 中的表