我有以下表格,如果名称相似,则尝试通过从同一个表复制将数据插入到表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
答案 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