mysql - 需要从 MySQL JOIN 查询中返回单个但得到多个
问题描述
我正在尝试从帐户表中列出单个 AccountID,从客户表中列出单个客户的 fname,lname。
帐户: 帐户ID
account_members : AccountID, ClientID
客户: ClientID、fname、lname
如您所见,accounts 和 account_members 表通过 AccountID 关联,而 account_members 和 clients 表通过 ClientID 关联。
我只想列出 1 个 AccountID 事件和一个客户 fname 和 lname。
我得到的是 AccountID 多次,具体取决于 account_members 表中列出了多少个帐户成员。
SELECT DISTINCT accounts.*, account_members.*, clients.*
FROM accounts
JOIN account_members ON accounts.AccountID = account_members.AccountID
JOIN clients ON account_members.ClientID = clients.ClientID
WHERE accounts.status='Active'
ORDER BY accounts.id DESC
LIMIT 4
解决方案
如果您的意图是为 AccountID 的每个唯一实例返回一个值,那么您想要的是从窗口函数中选择一个特定值。如果返回与 AccountID 关联的特定名称无关紧要,则以下查询应该有效。
SELECT DISTINCT
FIRST_VALUE(accounts.AccountID) OVER foo,
FIRST_VALUE(clients.fname) OVER foo,
FIRST_VALUE(clients.lname) OVER foo
FROM accounts
JOIN account_members ON accounts.AccountID = account_members.AccountID
JOIN clients ON account_members.ClientID = clients.ClientID
WHERE accounts.Status = 'Active'
WINDOW foo AS (PARTITION BY accounts.AccountID);
如果您为帐户返回的名称确实很重要,您需要加入该clients
表的有序子查询,该子查询将该名称推到顶部(或 last_value 的底部)而不是客户表本身。
推荐阅读
- loss-function - 具有 CTC 损失的 CNN
- azure - 工作站的 Azure 备份失败。没有数据传输到云端
- javascript - 我可以更改什么以使此代码适用于所有部分元素
- reactjs - TypeError:使用 React js 时无法读取 PDFJS.GlobalWorkerOptions.workerSrc 中未定义的属性“GlobalWorkerOptions”
- javascript - 使用 Node js,如何使用 yahoo 天气 api 在单个请求中获取多个城市的天气提要
- wordpress - 当页面不在菜单中时,Timber Twig 将类添加到祖先菜单项
- javascript - PHP encodeURIComponent 重置
- azure - 优化 Azure NSG 的 Powershell 脚本
- php - 使用 PHPWord 库读取 PDF 文件
- android - 如何可靠地获取和检测 Android 上活动音频路由的更改?