使用联接和条件SQL进行更新
我有两个表,我试图使用第二个表中的数据更新其中一个表中的一列。我拥有的SQL如下所示:使用联接和条件SQL进行更新,sql,postgresql,join,sql-update,Sql,Postgresql,Join,Sql Update,我有两个表,我试图使用第二个表中的数据更新其中一个表中的一列。我拥有的SQL如下所示: UPDATE table_one SET contents = CONCAT('https://someurl.com/', table_one.id, '.', split_part(T2.file_name, '.', 2)) FROM table_one T1 JOIN table_two T2 ON T1.i
UPDATE
table_one
SET
contents = CONCAT('https://someurl.com/', table_one.id, '.', split_part(T2.file_name, '.', 2))
FROM
table_one T1
JOIN
table_two T2
ON
T1.id = T2.image_id
WHERE
T1.kind IN ('image')
我试图做的是获取tabletable\u two
的file\u name
列的值,并将其插入到table\u one
的contents
列中,用于给定id和作为table\u 1
列的“image”类型。因此,更新应该只对带有kind='image'的记录进行。拆分和concat部分是为了获得文件的扩展名
这是可行的,但它会更新所有条目,而不考虑设置为“image”的类型。而且它似乎得到了所有相同的值,因为所有的扩展都被设置为相同的
有人能指出我做错了什么吗
更新:我正在使用Postgres
谢谢。您已将表1加入到自身中,没有加入条件。因此,您有一个笛卡尔连接,并且每一行都会更新
T1.kind IN('image')
无关紧要,因为您不是在更新T1,而是在更新表1
:
请注意,除非您打算进行自联接(在这种情况下,它必须在自联接列表中显示别名),否则目标表不得出现在自联接列表中
只需重写而不连接到T1。您必须将连接条件从ON移动到WHERE,因为无法将ON与隐式连接一起使用
UPDATE
table_one
SET
contents = CONCAT('https://someurl.com/', table_one.id, '.', split_part(T2.file_name, '.', 2))
FROM
table_two T2
WHERE
table_one.kind IN ('image') and table_one.id=t2.image_id
不要重复FROM子句中的目标表:
UPDATE table_one t1
SET contents = CONCAT('https://someurl.com/', table_one.id, '.', split_part(T2.file_name, '.', 2))
FROM table_two T2
WHERE T1.id = T2.image_id
AND T1.kind IN ('image')
您使用的是哪种dbms?您好,我想问题是您没有使用别名进行更新,如以下更新T1 SET T1.contents=CONCAT(“”,T1.id,“”,split_part(T2.file_name,“”,2))从表1 T1连接表2 T2 ON T1.id=T2.image\u id其中T1.kind IN('image')请阅读,然后用您正在使用的RDM标记您的问题,提供示例数据、当前输出和所需输出。我正在使用Postgres。感谢您的帮助!