mysql - 列出使用过所有付款方式的任何客户的姓名
问题描述
付款选项,c,e,m。我如何找到使用所有付款方式的人并显示他们的姓名
我试过了
SELECT cr.id, cr.firstName, cr.lastName FROM customer cr
INNER JOIN purchase pm
ON (cr.id = paymentmethod.customer)
WHERE pm.paymethod="c" and pm.paymethod="e" and pm.paymethod="m"
ORDER BY cr.name DESC
解决方案
您可以使用聚合和计数:
SELECT cr.id, cr.firstName, cr.lastName
FROM customer cr INNER JOIN
purchase pm
ON cr.id = pm.customer
WHERE pm.paymethod IN ('c', 'e', 'm')
GROUP BY cr.id, cr.firstName, cr.lastName
HAVING COUNT(DISTINCT pm.paymethod) = 3 -- number of methods in list
ORDER BY cr.name DESC;
还有其他方法。如果您正在寻找三种特定的付款方式,您也可以使用EXISTS
:
select c.*
from customer c
where exists (select 1
from purchase pm
where cr.id = pm.customer and pm.paymethod = 'c'
) and
exists (select 1
from purchase pm
where cr.id = pm.customer and pm.paymethod = 'e'
) and
exists (select 1
from purchase pm
where cr.id = pm.customer and pm.paymethod = 'm'
);
因为这避免了group by
外部查询中的 ,所以它可能比第一个查询快得多(假设您在(customer, paymentmethod)
.
推荐阅读
- postgresql - 比较文本类型日期并选择大于日期
- php - 如何修复 Tezos 上的发送交易隐式合约错误
- mysql - 如何将我的 ASP.Net 登录代码连接到 VB.Net 中的 MySQL 数据库
- android - Android:从数据库动态生成视图
- c# - 谷歌语音到文本使用相同的函数调用获得不准确的结果
- azure - 我可以将 Azure Kubernetes 节点连接到我的本地网络吗?
- macos - brew update (homebrew) 需要很长时间才能运行
- machine-learning - 如何使用 opencl 实现 pytesseract 代码以使其在 GPU 上运行?
- angular - Angular Inject 参数化提供程序
- php - 如何从选择表单中获取值到 SQL 查询中