首页 > 解决方案 > 需要从 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

标签: mysqljoin

解决方案


如果您的意图是为 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 的底部)而不是客户表本身。


推荐阅读