基本SQL连接问题。你能帮我提高技能吗?

时间:2009-11-13 02:53:28

标签: sql sql-server join

好的..所以我正在努力提高我的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

2 个答案:

答案 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。改为明确指定列。