好的..所以我正在努力提高我的SQL技能并提出一个问题。这是架构的屏幕截图。
Schema http://img509.imageshack.us/img509/97/screenhunter02nov121946.gif
(http://img509.imageshack.us/img509/97/screenhunter02nov121946.gif)
好吧,我正在从你可以看到的表中选择一堆报告包和其他行。我已经将这两个表正确地连接在一起并显示应该返回的内容。现在我需要在结果行中添加另一个字段,说明这是什么类型的报告。如何通过ReportBundleGroup表加入ReportGroupType表而不会收到大量结果?
这是我目前使用的查询。
SELECT *
FROM ReportBundleCustomerVisibility INNER JOIN ReportBundle
ON ReportBundleCustomerVisibility.ReportBundleID = ReportBundle.ID
WHERE ReportBundleCustomerVisibility.ReferenceCustomerID = 2303
再次感谢SO
答案 0 :(得分:1)
SELECT *
FROM ReportBundleCustomerVisibility AS v
JOIN ReportBundle AS b ON b.ID = v.ReportBundleID
JOIN ReportBundleGroup AS g ON b.ID = g.ReportBundleID
JOIN ReportGroupTYpe AS t ON t.ID = g.ReportGroupTypeID
WHERE v.ReferenceCustomerID = 2303
答案 1 :(得分:0)
听起来你只需要另一个内部联接来获取所需的信息。您可以将第二个连接视为将连接结果与ReportGroupType表连接起来。我添加了括号以尝试连接第二个INNER JOIN正在运行的两个集合。
SELECT * FROM ((ReportBundleCustomerVisibility
INNER JOIN ReportBundle ON ReportBundleCustomerVisibility.ReportBundleID = ReportBundle.ID)
INNER JOIN ReportGroupType ON ReportBundleGroup.ReportGroupTypeID = ReportGroupType.ID)
WHERE ReportBundleCustomerVisibility.ReferenceCustomerID = 2303
我还强烈建议不要在生产代码或您计划重用的任何查询中使用“SELECT *”,因为表架构可能会更改并可能影响报表和UI。改为明确指定列。