[英]Inner Joining the same table multiple times
所以我收到了這個錯誤:#1066 - 不唯一的表/別名:'購買'
我正在嘗試執行以下操作:
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";
空白表包括:
BlankCode,
IssueDate,
Status,
UserID,
BlankTypeCode
付款表包括:
Type,
Amount,
Status,
DueDate,
PurchaseID,
CurrencyRateDate
購買表包括:
PurchaseID,
CustomerID,
PurchaseDate,
TotalFare,
TaxAmount,
CurrencyType,
Purchasecol
票務表包括:
Price,
PurchaseID,
Blank_BlankCode,
Blank_BlankTypeCode,
TicketType,
Airline_Name
MCO_Blank表包括:
Service,
Cost,
Description,
Purchase_PurchaseID,
Blank_BlankCode,
Blank_BlankTypeCode
我不確定如何才能完成這項工作。
您需要使用表別名。 您在from
子句中多次提到同一個表。 查詢是這樣的:
SELECT b.BlankTypeCode, b.BlankCode, pa1.Amount, pa1.Type, p1.PurchaseDate, pa2.DatePaid
FROM Blank b
INNER JOIN Ticket t
ON b.BlankCode = t.Blank_BlankCode
INNER JOIN MCO_Blank mb
ON b.BlankCode = mb.Blank_BlankCode
INNER JOIN Purchase p1
ON t.PurchaseID = p1.PurchaseID
INNER JOIN Purchase p2
ON mb.PurchaseID = p2.PurchaseID
INNER JOIN Payment pa1
ON t.PurchaseID = pa1.PurchaseID
INNER JOIN Payment pa2
ON mc.PurchaseID = pa2.PurchaseID
WHERE pa1.Status = "Paid";
我不得不猜測哪些付款和購買是針對別名的。 這些在from
和where
子句中可能不正確。
您不能使用相同的名稱多次連接表,因此要么使用inner join purchase p1 on...
別名inner join purchase p1 on...
或者同時使用兩個連接謂詞,如inner join purchase ON first predicate AND second predicate
每次使用時,表都需要不同的別名。
SELECT B.BlankTypeCode, B.BlankCode, A1.Amount, A1.Type, P1.PurchaseDate, P1.DatePaid
FROM Blank AS B
JOIN Ticket AS T ON B.BlankCode = T.Blank_BlankCode
JOIN MCO_Blank AS M ON B.BlankCode = M.Blank_BlankCode
JOIN Purchase AS P1 ON T.PurchaseID = P1.PurchaseID
JOIN Purchase AS P2 ON M.PurchaseID = P2.PurchaseID
JOIN Payment AS A1 ON T.PurchaseID = A1.PurchaseID
JOIN Payment AS A2 ON M.PurchaseID = A2.PurchaseID
WHERE A1.Status = "Paid"
AND A2.Status = "Paid"
您需要確定所選列的哪些版本的Purchase和Payment表來自哪個,以及WHERE子句中應該包含哪些版本。
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";
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";
您已加入Payments表兩次,如果您確實需要加入兩次,則需要Alias,每次加入此表時都會使用不同的別名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.