簡體   English   中英

SQL Join-同一張表中的兩個外鍵引用一個主鍵

[英]SQL Join - two foreign keys in the same table reference a primary key

我有兩個表,一個是產品轉換歷史記錄表,另一個是產品表:

dbo.Product_Change_History

Date  FK_ProductID FK_FinalProductID ChangedBy
20160709    1               3           John

dbo.Product_Detail

PK_ProductID ProductName 
     1        Red Bike
     3        Green Bike

我想要一張像這樣的桌子:

 Date      ProductName FinalProductName
20160709   Red Bike     Green Bike

我如何結合兩個表來實現這一目標? 編輯:這是在TSQL中

您必須加入兩次,這意味着您至少要為其中一個加入別名:

SELECT Date, foo.ProductName, bar.FinalProductName
FROM Product_Change_history
LEFT JOIN Product_Detail AS foo ON fk_productid = foo.pk_productid
LEFT JOIN Product_Detail AS bar ON fk_finalproductid = bar.pk_productid

我不確定LEFT是否加入VS INNER。 我認為這會很好。

SELECT
 link.Date,
 old.ProductName,
 new.ProductName as FinalProductName
FROM
 dbo.Product_Detail as old
 INNER JOIN dbo.Product_Change_History as link
  ON old.PK_ProductID = link.FK_ProductID
 INNER JOIN dbo.Product_Detail as new
  ON new.PK_ProductID = link.FK_FinalProductID
declare @ProdChange table(ProductID int, FK_ProductID INT, FK_FinalProductID INT, ChangedBy Varchar(100))

declare @Prod table(ProductID int, ProductName Varchar(100))

insert into @Prod Values(1,'Red Bike')
insert into @Prod Values(3,'Green Bike')

insert into @ProdChange Values(1,1,3,'John')
select * from @Prod
select * from @ProdChange

SELECT 
 old.ProductName,
 new.ProductName as FinalProductName
FROM
 @Prod as old
 INNER JOIN @ProdChange as link
  ON old.ProductID = link.FK_ProductID
 INNER JOIN @Prod as new
  ON new.ProductID = link.FK_FinalProductID

感謝您的答復,在Chad Zinks的幫助下,我找到了正確的解決方案:

select
PRDHIST.Date,
OLDPROD.ProductName,
NEWPROD.ProductName
from dbo.Product_ChangeHistory PRDHIST
inner join dbo.Product_Detail OLDPROD
on OLDPROD.PK_ProductID = PRDHIST.FK_ProductID
inner join dbo.Product_Detail NEWPROD
on NEWPROD.PK_ProductID = PRDHIST.FK_FinalProductID;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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