字符串命令在sql中失败?
我只是试图截断Subjects.subjectid中varchar字段中指定记录子集的前两个字符,但它不起作用。我无法发现我的代码postgresql有什么问题:字符串命令在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
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命令,以便检查每个命令的结果。