sql - 多次内连接同一张表

标签 sql inner-join

所以我收到了这个错误:#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 子句中可能不正确。

关于sql - 多次内连接同一张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21641248/

相关文章:

php - MySQL 计算一段时间内共享至少 3 列中的 1 列的条目数

sql - 如何在sql中减去两列的日期

mysql - 内连接 MySQL 表与表之和

mysql - 获取好友更新查询

SQLite 自然连接坏了?

mysql - 三个表的关系顺序是正确的,但值是错误的

php - 当用户看到通知时更新阅读列

sql - 如何使用XML Auto获取SQL Server中XML路径获取的格式

mysql - 如果存在更新否则插入查询不起作用 mysql phpmyadmin

Mysql 查询 : Find Customer W/Orders but without Payment