【发布时间】:2020-07-02 11:53:41
【问题描述】:
请建议,我做错了什么。
UPDATE uc
SET uc.selected_value_id = cv.id, uc.fixed_value = NULL
FROM unit_characteristic uc
left JOIN characteristic_value cv ON uc.fixed_value like CONCAT(cv.value,'%')
WHERE cv.characteristic_id = 6
and uc.characteristic_id = 6
and uc.unit_id in (6313,6314)
遇到错误
SQL 错误 [42P01]:错误:关系“uc”不存在 职位:8 org.postgresql.util.PSQLException:错误:关系“uc”不存在 位置:8
虽然此选择工作正常
select count(uc.*)
FROM unit_characteristic uc
left JOIN characteristic_value cv ON uc.fixed_value like CONCAT(cv.value,'%')
WHERE cv.characteristic_id = 6
and uc.characteristic_id = 6
and uc.unit_id in (6313,6314)
【问题讨论】:
-
UPDATE ... FROM LEFT JOIN无论如何都没有意义。幸运的是,WHERE cv.characteristic_id = 6将 LEFT 连接变成了普通的内部连接。 -
如果我使用左连接或使用位置没有区别,两者的时间都得到相同的错误。
-
注释是关于语义的,而不是关于语法的。
-
(关于 wildplasser 的 cmets,它与您的代码有关,但与您的错误消息无关:) LEFT JOIN ON 返回 INNER JOIN ON 行 UNION ALL 不匹配的左表行,由 NULL 扩展。作为 OUTER JOIN ON 的一部分,始终知道您想要什么 INNER JOIN ON。在 LEFT JOIN ON 之后,需要右 [sic] 表列不为 NULL 的 WHERE、INNER JOIN 或 HAVING 会删除任何引入了 NULL 的行,即只保留 INNER JOIN ON 行,即“将 OUTER JOIN 转换为 INNER JOIN” .你有那个。
标签: sql postgresql sql-update left-join