2015-12-15 3 views
0

Я пытаюсь выполнить следующий запрос в Postgres:Проблемы с внутренним соединением при выполнении запроса

update changeitem c inner join issuestatus s on s.id = c.oldvalue and c.field = 'status' set oldstring = s.pname; 

Я получаю следующее сообщение об ошибке:

ERROR: syntax error at or near "inner" 
LINE 1: update changeitem c inner join issuestatus s on s.id = c.old... 

Я не совсем уверен, что это неправильно с моим заявлением.

ответ

2

Попробуйте так:

update changeitem c 
set oldstring = s.pname 
from issuestatus s 
where s.id = c.oldvalue 
and c.field = 'status'; 
+0

Perfecto! Это сработало. Можете ли вы объяснить, почему это работает, и мой не сделал? – Martin

+0

Конечно! Вот как синтаксис postres. Это позволяет нам «присоединяться» к второй таблице с помощью предложения 'from', как и я. если вам нужно «присоединиться» к третьей таблице, вы можете использовать предложение «join». 'Обновление changeitem с набор oldstring = s.pname из issuestatus s присоединиться к anothertable на на at.somecolumn = s.somecolumn где s.id = c.oldvalue и c.field = 'статус',' – Christian

+0

Ahh что имеет смысл. Я ценю помощь. Я приму свой ответ, как только это позволит. – Martin

0

Правильный запрос:

UPDATE c 
SET oldstring = s.pname 
FROM changeitem c 
WHERE c.field = 'status' 
AND c.id in (SELECT s.id FROM issuestatus s WHERE s.id = c.oldvalue) 
1

К сожалению UPDATE не поддерживает явное связывание, используя JOIN ключевое слово. Проверьте official documentation пожалуйста.

+0

и @Christian вместо этого дали вам рабочее решение. –

0

Попробуйте: Не Испытано:

update changeitem as c set oldstring = s.pname from issuestatus as s where s.id = c.oldvalue and c.field = 'status' ; 
0

То, что вы хотите сделать, может быть выполнена с UPDATE WITH пункта:

update changeitem c 
set oldstring = s.pname 
from issuestatus s 
where s.id = c.oldvalue and c.field = 'status'; 

см this sqlFiddle

Смежные вопросы