Intérieure se Joindre à la même table plusieurs fois
J'ai donc reçu ce message d'erreur: #1066 - Pas de table unique/alias: 'Achat'
Je suis en train de faire ce qui suit:
SELECT Blank.BlankTypeCode
,Blank.BlankCode
,Payment.Amount
,Payment.Type
,Purchase.PurchaseDate
,Payment.DatePaid
FROM Blank
INNER JOIN Ticket
ON Blank.BlankCode = Ticket.Blank_BlankCode
INNER JOIN MCO_Blank
ON Blank.BlankCode = MCO_Blank.Blank_BlankCode
INNER JOIN Purchase
ON Ticket.PurchaseID = Purchase.PurchaseID
INNER JOIN Purchase
ON MCO_Blank.PurchaseID = Purchase.PurchaseID
INNER JOIN Payment
ON Ticket.PurchaseID = Payment.PurchaseID
INNER JOIN Payment
ON MCO_Blank.PurchaseID = Payment.PurchaseID
WHERE Payment.Status = "Paid";
Vide la Table se compose de:
BlankCode,
IssueDate,
Status,
UserID,
BlankTypeCode
De paiement de la Table se compose de:
Type,
Amount,
Status,
DueDate,
PurchaseID,
CurrencyRateDate
Achat Table se compose de:
PurchaseID,
CustomerID,
PurchaseDate,
TotalFare,
TaxAmount,
CurrencyType,
Purchasecol
Ticket la Table se compose de:
Price,
PurchaseID,
Blank_BlankCode,
Blank_BlankTypeCode,
TicketType,
Airline_Name
MCO_Blank la Table se compose de:
Service,
Cost,
Description,
Purchase_PurchaseID,
Blank_BlankCode,
Blank_BlankTypeCode
Je suis pas sûr de savoir comment je peux faire ce travail.
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser des alias de table. Vous avez mentionné la même table plusieurs fois dans la
from
clause. La requête est quelque chose comme ceci:Je devais faire une supposition à laquelle le paiement et l'achat est prévu pour les alias. Ceux-ci peuvent ne pas être correcte dans la
from
etwhere
clauses.on
clauses sont corrects. Ils sont plus faciles à comprendre, car ils doivent se référer à la "plus proche" de la table de référence.DatePaid
colonne, vous avez un problème avec la liste de sélection dans la requête initiale. La colonne date d'il semble y avoirPurchaseDate
.Vous ne pouvez pas participer à une table plus d'une fois en utilisant le même nom, donc soit le rejoindre avec un alias comme
inner join purchase p1 on...
ou utiliser des prédicats de jointure ensemble commeinner join purchase ON first predicate AND second predicate
Vous avez besoin d'un autre alias de la table chaque fois que vous l'utilisez.
Vous aurez besoin de trier les versions de l'Achat et le Paiement des tables les colonnes sélectionnées proviennent, et aussi ce qui devrait être dans la clause where vraiment.
SELECT bl.BlankTypeCode
,bl.BlankCode
,pymt.Amount
,pymt.Type
,purc.PurchaseDate
,pymt.DatePaid
FROM Blank bl
INNER JOIN Ticket tk
ON bl.BlankCode = tk.Blank_BlankCode
INNER JOIN MCO_Blank mco_bl
ON bl.BlankCode = mco_bl.Blank_BlankCode
INNER JOIN Purchase purc
ON tk.PurchaseID = purc.PurchaseID
AND mco_bl.PurchaseID = purc.PurchaseID
INNER JOIN Payment pymt
ON tk.PurchaseID = pymt.PurchaseID
AND mco_bl.PurchaseID = pymt.PurchaseID
WHERE pymt.Status = "Paid";
Vous avez rejoint les Paiements table deux fois, Si vous avez besoin de joindre deux fois vous avez besoin de faire un Alias , un alias différent chaque fois que vous vous joignez à cette table.