【发布时间】:2020-01-03 20:40:40
【问题描述】:
我知道如何进行左连接,但是当我向查询中添加两个时。它变得有点奇怪。所以,这里是任务。原始表 list20192 有 93 列和 85,353 行。但是,最终用户不同意没有描述性字段,例如标题或描述。一个领域,naics,是一个六位数的代码,他们想要一个行业头衔。对于与 naics 代码 551114 对应的标题,必须转到具有以下结构的 indcodes 表:
state char(2)
codetype char(2)
code char(6)
codetitle varchar (115)
GEOG Table
state char (2)
areatype char(2)
area (6)
areaname varchar (254)
areadesc varchar (254)
我正在使用以下查询将 list20192 中字段的描述性对应项附加到末尾。最终结果应该是 96 列和 85,353 行。此查询有效,但生成的行数太多了 6,800,277 行。
Select list20192.*, geog.area, sizeclas.sizedesc
from dbo.list20192
left join dbo.indcodes on list20192.naics = indcodes.code
left join dbo.sizeclas on list20192.sizeclass = sizeclas.sizeclass
left join dbo.geog on list20192.area = geog.area
where list20192.year = '2019' and list20192.qtr = '2'
最终结果应该是这样的。有两行,第六项在第二行。
naics codetitle sizeclass sizedesc area
541114 Management 22 400 to 499 employees 000025
areaname
Pershing
有什么想法可以调整此查询以不收到这么多结果吗?现在结果显示,它似乎给了我一个 geog 中每个区域值的结果,而不考虑状态。我处于状态 32。我的原始表 list20192 仅处理状态 32。对于每个状态,有许多区域值可能相同。例如,内华达州的 000003 地区是克拉克,而南达科他州的 000003 地区是比德尔县
【问题讨论】:
-
您的代码看起来不错。问题似乎是错误的连接键,但这并不是人们不熟悉您的数据并提供帮助的真正问题。
-
@Gordon Linoff,结果我得到了 6,800,277 行,并且只有 2 个额外的列而不是 3 个。
-
为了清楚起见 和 来表达您的连接,我会使用表别名,例如
from dbo.list20192 a、left join dbo.indcodes b on a.naics = b.code等等。当使用join .. on语法时,表名在on子句中明确指定,别名是最简单的方法。在整个查询中使用这些别名。 -
您可能会重复,可以添加不同的,或者找到一个重复的并深入每个表以查看其是否有错误数据。