簡體   English   中英

內部多次連接同一個表

[英]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";

我不得不猜測哪些付款和購買是針對別名的。 這些在fromwhere子句中可能不正確。

您不能使用相同的名稱多次連接表,因此要么使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM