【发布时间】:2014-11-28 21:52:17
【问题描述】:
如何使用JOIN 合并两个表中的记录和UNION。例如,假设我有以下表 A 和 B,并希望最终像表 C 一样。
我想提取并合并与tableA.Customer ID 匹配的所有tableB.Item ID,如果有多个匹配项,那么我想创建一个包含另一个匹配项的新字段。
//表A
Customer ID Customer_Bill_Name.......
XXX001 XXX Company Name......
XXX002 YYY Company Name......
//表B
Customer ID Item ID 1
XXX001 WH15 02
XXX001 600278
XX0002 600000
//表C:我想这样结束
Customer ID Customer_Bill_Name Item ID 1 Item ID 2
XXX001 XXX Company Name WH15 02 600278
XX0002 YYY Company Name 600000
这是我使用JOIN合并记录的SQL代码
$result = mysqli_query($con,"SELECT Customers.CustomerId,
Customers.Customer_Bill_Name,
Customers.WhichShipVia,
JrnlHdr.INV_POSOOrderNumber,
JrnlHdr.ShipByDate,
JrnlHdr.GoodThruDate,
JrnlHdr.CustomerSONo,
JrnlHdr.Reference,
JrnlHdr.TransactionDate,
JrnlRow.DistNumber,
JrnlRow.Quantity,
LineItem.ItemID,
LineItem.SalesDescription,
LineItem.PartNumber,
LineItem.ItemDescription
FROM Customers
INNER JOIN JrnlHdr
ON Customers.CustomerRecordNumber = JrnlHdr.CustVendId
LEFT OUTER JOIN Address
ON Customers.CustomerRecordNumber = Address.CustomerRecordNumber
INNER JOIN JrnlRow // store sales order information
ON JrnlHdr.PostOrder = JrnlRow.PostOrder
LEFT OUTER JOIN BOMItems // stores Bill of Materials attached to the sales order
ON JrnlRow.ItemRecordNumber = BOMItems.AssemblyRecordNo
INNER JOIN LineItem //Stores all Inventory Items
ON JrnlRow.ItemRecordNumber = LineItem.ItemRecordNumber
WHERE JrnlHdr.JrnlKey_Journal = 11
AND JrnlHdr.PostOrder = JrnlRow.PostOrder
AND JrnlHdr.CustVendId = Customers.CustomerRecordNumber
AND JrnlRow.ItemRecordNumber = LineItem.ItemRecordNumber
AND JrnlHdr.POSOisClosed = 0
AND JrnlHdr.TransactionDate = '2014-11-17'
ORDER BY JrnlHdr.Reference,JrnlRow.DistNumber");
【问题讨论】:
-
这是一个pivot查询,mysql不支持。变通方法变得丑陋非常很快,而且由于你基本上有无限数量的可能列,我强烈建议你做一个正常的连接然后做行->客户端代码中的列转换。
标签: mysql join inner-join sql