我在连接两个表时遇到问题,只能从另一个表返回一列。
SELECT om.*, cm.Sales_Stage
FROM dbo.OM_Table1 om
JOIN dbo.Criteria_Matters cm ON cm.clientCorporationID = om.ClientCorporationID
ORDER BY om.ClientCorporationID
我想从我的CM表中包含Sales_Stage,但是连接导致结果集返回14k +行而不是没有连接返回的~7k。
无论如何只是引入这个额外的列而不会破坏查询?
答案 0 :(得分:1)
您可以使用子查询...请注意,由于每个sales_stage
Criteria_Matters
中有多个条目,因此可能无法正确选择所需的ClientCorporationID
。你可能需要在子查询上订购。
SELECT om.*,
(SELECT TOP 1 cm.Sales_Stage
FROM dbo.Criteria_Matters cm
WHERE cm.clientCorporationID = om.ClientCorporationID) AS Sales_Stage
ORDER BY om.ClientCorporationID
...我假设om.*
仅用于示例。通常最佳做法是不要在生产中这样做。
如果你打算看到差异,你可能想要做这样的事情......
SELECT om.*, cm.Sales_Stage, cm.Criteria_MatterID
FROM dbo.OM_Table1 om
JOIN dbo.Criteria_Matters cm ON cm.clientCorporationID = om.ClientCorporationID
ORDER BY om.ClientCorporationID
答案 1 :(得分:0)
只是猜测,因为没有关于表结构的信息,但问题很可能是Criteria_Matters表有给定clientCorporationID的许多记录。因此,它将根据匹配的Criteria_Matters.ClientCorporationID记录的数量复制OM_Table1中的每条记录。
有几种方法可以解决这个问题 - 一种方法是使用内联视图而不是连接到完整的Criteria_Matters表。
如果添加内联视图和GROUP BY Criteria_Matters.ClientCorporationID - 您可以保证在连接表中每个ClientCorporationID只有一条记录 - 并且您不会获得重复记录。当然,由于您按clientCorporationID进行分组,因此需要将一些聚合函数应用于Sales_Stage。如果您只选择MAX(Sales_Stage),您将获得最大值。如果您知道Sales_Stage对于每个给定的clientCorporationID都是相同的 - 您都已设置好。 SQL将类似于以下内容:
SELECT om.*, cm.Sales_Stage
FROM dbo.OM_Table1 om
INNER JOIN
(
SELECT clientCorporationID, MAX(Sales_Stage) AS Sales_Stage
FROM dbo.Criteria_Matters
GROUP BY clientCorporationID
) cm ON cm.clientCorporationID = om.ClientCorporationID
ORDER BY om.ClientCorporationID
但是,如果Criteria_Matters表中的给定clientCorporationID有不同的Sales_Stage值,则可以按clientCorporationID和Sales_Stage进行分组。执行此操作时,您现在将获得重复的OM_Table1记录 - 但仅适用于与Criteria_Matters中的ClientCorporationID相对应的每个唯一Sales_Stage。 SQL看起来像这样:
SELECT om.*, cm.Sales_Stage
FROM dbo.OM_Table1 om
INNER JOIN
(
SELECT clientCorporationID, Sales_Stage
FROM dbo.Criteria_Matters
GROUP BY clientCorporationID, Sales_Stage
) cm ON cm.clientCorporationID = om.ClientCorporationID
ORDER BY om.ClientCorporationID
祝你好运!