Нужен однократный возврат из MySQL JOIN-запроса, но получение нескольких - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь перечислить один AccountID из таблицы счетов, имя одного клиента, имя lname из таблицы клиентов.

account : AccountID

account_members : AccountID, ClientID

клиентов : ClientID, fname, lname

Как видите, таблицы account и account_members связаны через AcccountID, а таблица account_members и клиенты связаны через 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

1 Ответ

1 голос
/ 09 октября 2019

Если вы намереваетесь вернуть одно значение для каждого уникального экземпляра 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), а не самой таблицы клиентов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...