我有一個列ContentID
在表中標識其他表中存在的內容。例如,它可能涉及pageID
,productID
等。我的計劃是使用它來獲取我需要的其他信息,例如頁面名稱或產品名稱。這是我到目前爲止有:如何從多個表中獲取一個字段的數據?
SELECT TL.ID, TL.TableName, TL.FileName, TL.ContentID, p.PageName AS Content
FROM TranslationLog TL
LEFT JOIN Pages P ON TL.ContentID = P.PageID
LEFT JOIN Categories C ON TL.ContentID = C.CategoryID
LEFT JOIN ProductDescriptions PD ON TL.ContentID = PD.SKU
的想法是爲每一行,我想要得到的數據使用TableName
和ContentID
領域指定的內容。目前,我可以通過選擇p.PageName AS Content
來獲得PageName
。但是,我想爲每個表格都做這件事。如果該行對應於pages表,則查詢該表 - 對於類別和產品描述是相同的。我還需要它具有別名「內容」,而不管我們正在使用的另一個表中的哪個字段,如PageName
或ProductName
。
可以做到這一點嗎?
編輯:
發表rd_nielsen的解決方案是近乎完美,但事實證明確實有一點與ContentID
重疊。這是我結束了與解決它:
SELECT TL.ID, TL.TableName, TL.FileName, TL.ContentID, coalesce(P.PageName, C.CategoryName, PD.ProductName)
FROM TranslationLog TL
LEFT JOIN Pages P ON TL.ContentID = P.PageID AND TL.TableName = 'Pages'
LEFT JOIN Categories C ON TL.ContentID = C.CategoryID AND TL.TableName = 'Categories'
LEFT JOIN ProductDescriptions PD ON TL.ContentID = PD.SKU AND TL.TableName = 'Products'
我認爲樣本數據和預期的結果將真正幫助。 –