基于另一个表中的select更改列的重复值

问题描述 投票:0回答:1

我试图为table2中的select的每个响应复制行table1,并将其中一列的值更改为table2的结果

所以这是我从table1中选择以获取我想要复制的值:

SELECT DISTINCT * FROM table1 WHERE CODE = 'abcd'

响应:

Code     zone
abcd      1
abcd      2
abcd      3
abcd      4

并且我希望从以下选择的每个响应中复制上述选择的所有结果

SELECT DISTINCT CODE AS code
FROM table2
WHERE CODE LIKE '%abcd%'

目标:

Code     zone
abcde      1
abcde      2
abcde      3
abcde      4
abcdef     1
abcdef     2
abcdef     3
abcdef     4
zabcd      1
zabcd      2
zabcd      3
zabcd      4

然后我想将这些值添加到table1

sql sql-server ssms sql-insert
1个回答
2
投票

听起来像你想要一个CROSS JOIN

SELECT B.code, A.zone
FROM (SELECT DISTINCT Code, zone 
      FROM table1 
      WHERE CODE = 'abcd') A
CROSS JOIN (SELECT DISTINCT CODE AS code
            FROM table2
            WHERE CODE LIKE '%abcd%') B
;

如果要在table1中插入此数据:

INSERT INTO table1(code, zone)
SELECT B.code, A.zone
FROM (SELECT DISTINCT Code, zone 
      FROM table1 
      WHERE CODE = 'abcd') A
CROSS JOIN (SELECT DISTINCT CODE AS code
            FROM table2
            WHERE CODE LIKE '%abcd%') B
WHERE NOT EXISTS(SELECT 1 FROM table1
                 WHERE code = B.code
                 AND zone = A.zone)
;
© www.soinside.com 2019 - 2024. All rights reserved.