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/