通过复制同一个表中的值将SQL数据插入表中

时间:2017-10-25 20:58:55

标签: sql sql-server

我有以下表格,如果名称相似,则尝试通过从同一个表复制将数据插入到表T2中。

例如,如果T2的名称为红色,则从T1复制ID和名称以及T2字段。

表T1

  ID| NAME
  5   RED T
  6   BLUE T

表T2

  ID| NAME| FIELD 1| FIELD 2|FIELD 3
  1   RED   17       20      23
  2   RED   10       15      9
  3   BLUE  7        8       3

预期结果:

  TABLE T3
  ID| NAME| FIELD 1| FIELD 2|FIELD 3
  1   RED   17       20      23
  1   RED   10       15      9
  5   RED T 17       20      23
  5   RED T 10       15      9
  3   BLUE T 7        8       3
  6   BLUE T 7        8       3

以下是我的尝试:

  Insert into T1
  Select ID, Name, Field1, Field2, Field3 From T2 a
  Left Join T1 b
  On a.Name like b.name

4 个答案:

答案 0 :(得分:1)

INSERT INTO T2 ([NAME], FIELD1, FIELD2, FIELD3) 
SELECT T1.NAME, FIELD1, FIELD2, FIELD3 
FROM T2 LEFT JOIN T1 ON T1.NAME LIKE CONCAT("%", T2.NAME ,"%")

答案 1 :(得分:0)

我认为您的问题归因于'RED T'不是like 'RED'

你可以尝试

  Insert into T1
  Select ID, Name, Field1, Field2, Field3 From T2 a
  Left Join T1 b
  On a.Name like ('%' + b.name + '%')

...但这不是通用的,或者至少它不能与你期望的所有情况相匹配。 正如其他人所说,你应该更明确地指明你的意思"类似的"

答案 2 :(得分:0)

以下是可能的查询

Insert into T1 (ID, Name, Field1, Field2, Field3) 
Select t.ID, t.Name, t2.Field1, t2.Field2, t2.Field3 
From T1 t Left outer join T2 t2 on  
substring(t.Name,1,CHARINDEX(' ', t.Name))=t2.Name 

可能的语法不匹配道歉,因为我没有执行它并通过电话输入解决方案

我提出的解决方案是基于以下假设:在T1中,匹配颜色应该是第一部分,然后是空格,最后是最后部分

答案 3 :(得分:0)

你提到插入T2,但结果显示T3所以我现在用T3。如果你真的只想要已经在T2中的记录,那么你可以将UNION省略到第二部分。既然你说过含有'与“类似”相同。为了您的目的:

CREATE TABLE T1
(
    ID INT,
    NAME VARCHAR(20)
);
INSERT INTO T1 VALUES (5, 'RED T');
INSERT INTO T1 VALUES (6, 'BLUE T');

CREATE TABLE T2
(
    ID INT,
    NAME VARCHAR(20),
    FIELD1 INT,
    FIELD2 INT,
    FIELD3 INT
);
INSERT INTO T2 VALUES (1,'RED',17,20,23);
INSERT INTO T2 VALUES (2,'RED',10,15,9);
INSERT INTO T2 VALUES (3,'BLUE',7,8,3);

INSERT INTO T3(ID, NAME, FIELD1, FIELD2, FIELD3)
SELECT T1.ID, T1.NAME, T2.FIELD1, T2.FIELD2, T2.FIELD3
FROM T1 INNER JOIN T2 ON T1.NAME LIKE '%'||T2.NAME||'%'
UNION
SELECT T2.ID, T2.NAME, T2.FIELD1, T2.FIELD2, T2.FIELD3
FROM T2
ORDER BY ID