Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用联接和条件SQL进行更新_Sql_Postgresql_Join_Sql Update - Fatal编程技术网

使用联接和条件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

我有两个表,我试图使用第二个表中的数据更新其中一个表中的一列。我拥有的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.id = T2.image_id
WHERE   
        T1.kind IN ('image')
我试图做的是获取table
table\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。感谢您的帮助!