Строка команды не удается в SQL? - PullRequest
0 голосов
/ 16 ноября 2011

Я просто пытаюсь обрезать первые два символа из поля varchar в Subjects.subjectid для указанного подмножества записей, но это не работает.Я не могу определить, что не так с моим кодом (postgresql):

UPDATE subjects
SET
    subjectid = substring(S.subjectid from 2)
FROM
  ibg_studies ST,subjects S,dnasample D
WHERE 
    D.studyindex=ST.studyindex
    AND ST.studyabrv='CONGER'
    AND D.subjectidkey=S.id
    AND D.projectindex IS NULL

Любые идеи приветствуются.

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

Ваш подзапрос не связан (не связан) с обновляемой таблицей.Я не знаю, каковы были ваши намерения, но, может быть, вы хотите этого (просто догадываясь):

UPDATE subjects sj
SET
   subjectid = substring(S.subjectid from 2) -- << what is this?
FROM
  ibg_studies st
  -- ,subjects s
  ,dnasample d
WHERE d.studyindex = st.studyindex
  AND st.studyabrv = 'CONGER'
  AND d.subjectidkey = sj.id  -- changed from s to sj?
  AND d.projectindex IS NULL
    ;
0 голосов
/ 18 ноября 2011

Кажется, проблема в том, что в SQL возникла проблема с обновлением поля при вызове строковой функции в том же поле. Я преодолел ограничение, добавив столбец в таблицу, обновив этот новый столбец с помощью строковой функции, а затем скопировав это новое значение столбца в исходное целевое поле, например:

-- 6: copy modified subjectid to temp
--UPDATE dnasample D
--SET
--  temp = substring(S.subjectid from 3)
--FROM
--  ibg_studies ST,subjects S
--WHERE 
--  D.studyindex=ST.studyindex
--  AND ST.studyabrv='CONGER'
--  AND D.subjectidkey=S.id
--  AND D.projectindex IS NULL

-- 7: copy temp to subjectid
--UPDATE subjects S
--SET
--  subjectid = D.temp
--FROM
--  ibg_studies ST,dnasample D
--WHERE 
--  D.studyindex=ST.studyindex
--  AND ST.studyabrv='CONGER'
--  AND D.subjectidkey=S.id
--  AND D.projectindex IS NULL

-- 8: Remove the temp column
ALTER TABLE dnasample DROP COLUMN temp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...