与具有单行(多列)的表交叉联接的替代方法

时间:2018-07-11 04:39:03

标签: sql-server sql-server-2014 cross-join

我有一个用于配置的表格-tblConfig,如下所示

# Return 2nd coeffficient of weighted regression
coeff <- lapply(lst, function(df)
    coefficients(lm(Y1 ~ X1, data = df , weights = weights))[2])

另一个表tblData的行数超过1万。

我想编写一个查询以返回tblData表行以及tblConfig表的列。

例如:

-------------------------------------------
| SiteCode  |  CompanyCode | CompanyGroup |
-------------------------------------------
| AISH78    |  SPWI85      |SFTIT         |
-------------------------------------------

我知道我可以编写交叉联接查询

---------------------------------------------------------------------------
| SiteCode  |  CompanyCode | CompanyGroup | tblDataCol1 | tblDataCol2|.....etc
---------------------------------------------------------------------------
| AISH78    |  SPWI85      |SFTIT         |    1        |  XY       | ....etc
----------------------------------------------------------------------------
| AISH78    |  SPWI85      |SFTIT         |    2        |  MN       | ....etc
----------------------------------------------------------------------------
| AISH78    |  SPWI85      |SFTIT         |    3        |  PQ       | ....etc
----------------------------------------------------------------------------
...
...
...
..etc

但是,由于tblData的行数超过1万,因此Query会影响性能。 (在此交叉连接之后,我还有其他查询)。

在上述情况下,交叉联接是否有其他选择? 请帮忙。

1 个答案:

答案 0 :(得分:0)

嗯...您不需要使用交叉联接。您也可以使用常规内部联接。但是,可能是优化器毕竟将其更改为交叉联接-您必须尝试性能是否符合您的要求:

DECLARE @t1 TABLE(
  SiteCode NVARCHAR(10),
  CompanyCode NVARCHAR(10),
  CompanyGroup NVARCHAR(10)
)

INSERT INTO @t1 VALUES ('AISH78','SPWI85', 'SFTIT')


DECLARE @t2 TABLE(
  c1 NVARCHAR(10),
  c2 NVARCHAR(10),
  c3 NVARCHAR(10)
)

INSERT INTO @t2 VALUES ('AAA','BBB', 'CCC'), ('DDD','EEE', 'FFF'), ('GGG','HHH', 'III')

SELECT t1.*, t2.*
  FROM @t2 t2
  JOIN @t1 t1 ON t1.SiteCode = t1.SiteCode