字符串命令在sql中失败?

字符串命令在sql中失败?,sql,postgresql,Sql,Postgresql,我只是试图截断Subjects.subjectid中varchar字段中指定记录子集的前两个字符,但它不起作用。我无法发现我的代码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.studyabr

我只是试图截断Subjects.subjectid中varchar字段中指定记录子集的前两个字符,但它不起作用。我无法发现我的代码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

任何想法都值得赞赏。

您的子查询不会与正在更新的表不相关。 我不知道你的意图是什么,但也许你只是想猜测一下:

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
    ;

问题似乎是SQL在对同一字段调用字符串函数时更新字段时遇到问题。我克服了这个限制,向表中添加了一列,使用string函数更新这个新列,然后将新列值复制到原始目标字段中,如下所示:

-- 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

运行以下命令并告诉我们发生了什么从ibg_studies ST、subjects S、dnasample D中选择S.subjectid,其中D.studyindex=ST.studyindex和ST.studyabrv='CONGER',D.subjectidkey=S.id和D.projectindex为null注意:我会手动添加或删除SQL注释操作符,然后重新运行脚本。我只希望一次运行一个SQL命令,以便检查每个命令的结果。