Самостоятельная ссылка MySQL JOIN

У меня есть две таблицы:

Customers (
    int(11) Id, 
    varchar(255) Name, 
    int(11) Referred_ID -- Referred_ID being reference to an Id field 
                        -- (no key on that field) and 
)

другая таблица:

Invoices (
    int(11) Id, 
    date Billing_date, 
    int(11) Customer_ID
)

Я хочу выбрать Id, Billing_date счета-фактуры И, самое главное, Name клиента, к которому относится этот клиент.

Теперь я могу выбрать его идентификатор реферера только с помощью такого запроса:

SELECT Invoices.Id, Invoices.Billing_date, Customers.Name, Referred_ID
    FROM Invoices 
    INNER JOIN Customers ON Invoices.Customer_Id = Customers.Id;

Как мне изменить свой запрос, чтобы заменить этот Referred_ID именем его владельца?

Кстати, это MySQL примерно 2015 года выпуска.


person tnsaturday    schedule 19.03.2019    source источник
comment
Я не проверял это, но я думаю, что следующее должно работать для вашего случая SELECT Invoices.Id, Invoices.Billing_date, MainCustomer.Name, RefCustomer.Name FROM Invoices INNER JOIN Customers AS MainCustomer ON Invoices.Customer_Id=MainCustomer.Id LEFT JOIN Customers AS RefCustomer ON RefCustomer.Id=MainCustomer.Referred_ID   -  person Rahul Verma    schedule 19.03.2019
comment
Это MySQL примерно 2015 года... -- Это MySQL 5.x.   -  person The Impaler    schedule 19.03.2019
comment
В MySQL 5.x вы можете просматривать ограниченное количество ссылок. Если вы хотите прямого направления, то это легко. Если вам нужен первоначальный реферал, возвращающийся к самому первому, вам понадобится MySQL 8.x (рекурсивные CTE).   -  person The Impaler    schedule 19.03.2019


Ответы (2)


Вы можете использовать два раза клиентов, использующих псевдоним для присоединения к указанному

    SELECT Invoices.Id, Invoices.Billing_date, Customers.Name, Referred.Name 
    FROM Invoices 
    INNER JOIN Customers ON Invoices.Customer_Id = Customers.Id
    INNER JOIN Customers Referred on Referred.id =  Customers.Referred_ID;
person scaisEdge    schedule 19.03.2019

использовать таблицу клиентов дважды в соединении

 SELECT Invoices.Id, Invoices.Billing_date,
 c1.Name as customername,
c1.Referred_ID,
c2.Name as refername 
FROM Invoices INNER JOIN Customers c1 ON Invoices.Customer_Id = c1.Id
join Customers c2 on  c1.Id=c2.Referred_ID 
person Zaynul Abadin Tuhin    schedule 19.03.2019
comment
@tnsaturday проверьте сейчас, пожалуйста, была опечатка - person Zaynul Abadin Tuhin; 19.03.2019
comment
@tnsaturday я пропустил - person Zaynul Abadin Tuhin; 19.03.2019