我有一个列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'
我认为样本数据和预期的结果将真正帮助。 –