如何连接表以获得结果

Om.*_*Om. 0 sql sql-server

我有以下数据

表1数据:

Attr1    Attr2
36 L
37 L
38 L
39 L
40 L
41 L
42 L
43 L
44 L
46 L
48 L
50 L
52 L
54 L
56 L
58 L
60 L
62 L
36 P
37 P
38 P
39 P
40 P
41 P
42 P
43 P
44 P
46 P
48 P
50 P
52 P
54 P
56 P
58 P
60 P
62 P
36 PL
37 PL
38 PL
39 PL
40 PL
41 PL
42 PL
43 PL
44 PL
46 PL
48 PL
50 PL
52 PL
54 PL
56 PL
58 PL
60 PL
62 PL
36 PS
37 PS
38 PS
39 PS
40 PS
41 PS
42 PS
43 PS
44 PS
46 PS
48 PS
50 PS
52 PS
54 PS
56 PS
58 PS
60 PS
62 PS
36 R
37 R
38 R
39 R
40 R
41 R
42 R
43 R
44 R
46 R
48 R
50 R
52 R
54 R
56 R
58 R
60 R
62 R
36 S
37 S
38 S
39 S
40 S
41 S
42 S
43 S
44 S
46 S
48 S
50 S
52 S
54 S
56 S
58 S
60 S
62 S
36 XL
37 XL
38 XL
39 XL
40 XL
41 XL
42 XL
43 XL
44 XL
46 XL
48 XL
50 XL
52 XL
54 XL
56 XL
58 XL
60 XL
62 XL
Run Code Online (Sandbox Code Playgroud)

和table2如下:

ItemCode          Attr1     Attr2
ITEM-000001 43 S
ITEM-000001 52 L
ITEM-000006 42 R
ITEM-000006 44 R
ITEM-000009 56 R
Run Code Online (Sandbox Code Playgroud)

table2中会有更多项目.

如何获得输出,其中我将得到具有相同'Attr2'的table1的所有行,例如'ITEM-000001'具有两个Attr2 - 'S'和'L',因此它将显示如下所示:

Attr1    Attr2       ItemCode
    36 L           ITEM-000001
    37 L           ITEM-000001
    38 L           ITEM-000001
    39 L           ITEM-000001
    40 L           ITEM-000001
    41 L           ITEM-000001
    42 L           ITEM-000001
    43 L           ITEM-000001
    44 L
    46 L
    48 L
    50 L
    52 L
    54 L
    56 L
    58 L
    60 L
    62 L           ITEM-000001
    36 S           ITEM-000001
    37 S
    38 S
    39 S
    40 S
    41 S
    42 S
    43 S
    44 S
    46 S
    48 S
    50 S
    52 S
    54 S           ITEM-000001
    56 S           ITEM-000001
    58 S           ITEM-000001
    60 S           ITEM-000001
    62 S           ITEM-000001
Run Code Online (Sandbox Code Playgroud)

Pet*_*ang 6

编辑

阅读你的查询,我想我终于知道你想要什么:

获取所有DISTINCT ItemCodeAttr2Table2,并加入所有不同Attr1Table1.我仍然无法从您提供的样品中看到...

您可以将查询减少到:

SELECT DISTINCT T2.ItemCode, T1.Attr1, T2.Attr2
FROM
  Table1 T1
  CROSS JOIN Table2 T2
ORDER BY 1, 2, 3
Run Code Online (Sandbox Code Playgroud)

我想通过以下方式可以提高性能:

SELECT T2.ItemCode, T1.Attr1, T2.Attr2
FROM
  ( SELECT DISTINCT Attr1
    FROM Table1
  ) T1
  CROSS JOIN
  ( SELECT DISTINCT ItemCode, Attr2
    FROM Table2
  ) T2
ORDER BY 1, 2, 3
Run Code Online (Sandbox Code Playgroud)

原帖:

你可以用一个LEFT JOIN.这将返回条件匹配的所有行Table1和连接行Table2.栏目Table2NULL,如果没有行匹配.

SELECT t1.Attr1, t1.Attr2, t2.ItemCode
FROM Table1 t1
LEFT JOIN Table2 t2 ON ( t2.Attr1 = t1.Attr1 AND t2.Attr2 = t1.Attr2 )
WHERE t1.Attr2 IN ( 'S', 'L' )
Run Code Online (Sandbox Code Playgroud)