该查询如何导致缺少子句?

时间:2018-11-27 07:22:47

标签: sql postgresql sql-update

此子句始终显示“错误:PostgreSQL 10中表“ subid”的缺少FROM子句条目。 怎么这样?

UPDATE "io_S1"."tc_history"
  SET "c_TIME" = TT."c_TIME",
      "b_TIME_c"=TT."b_TIME_c",
      "b_TIME_COLLECTION"=TT."b_TIME_COLLECTION",
      "c_NOTE"=TT."c_NOTE",
      "b_TIME_TAXI"=TT."b_TIME_TAXI",
      "b_LOCATION_TAXI"=TT."b_LOCATION_TAXI",
      "ESTABLISHED_TIME"=TT."c_TIME"
FROM (
  SELECT "c_TIME","b_TIME_c","b_TIME_COLLECTION","c_NOTE","b_TIME_TAXI","b_LOCATION_TAXI","c_TIME" 
  FROM "io_TRACE"."PERSONAL_Tc_RECORD" TR
  WHERE TR."PERSONAL_SERIAL_ID" IN (SELECT "SUBJECT_ID" 
                                    FROM "io_COLLECTION"."COLLECTION_CONSENT_RECORD" AS SUBID 
                                    WHERE SUBID."SUBJECT_CITIZEN_ID" IN (SELECT "SUBJECT_CITIZEN_ID" 
                                                                         FROM "io_S1"."tc_history" AS TC))
) AS TT
WHERE "SUBJECT_CITIZEN_ID"=SUBID."SUBJECT_CITIZEN_ID";

2 个答案:

答案 0 :(得分:0)

您可以在下面尝试

UPDATE "io_S1"."tc_history"
  SET "c_TIME" = TT."c_TIME",
      "b_TIME_c"=TT."b_TIME_c",
      "b_TIME_COLLECTION"=TT."b_TIME_COLLECTION",
      "c_NOTE"=TT."c_NOTE",
      "b_TIME_TAXI"=TT."b_TIME_TAXI",
      "b_LOCATION_TAXI"=TT."b_LOCATION_TAXI",
      "ESTABLISHED_TIME"=TT."c_TIME"
FROM (
  SELECT "c_TIME","b_TIME_c","b_TIME_COLLECTION","c_NOTE","b_TIME_TAXI","b_LOCATION_TAXI","c_TIME",
SUBID."SUBJECT_CITIZEN_ID"
FROM "io_TRACE"."PERSONAL_Tc_RECORD" TR inner join 
 "io_COLLECTION"."COLLECTION_CONSENT_RECORD" AS SUBID
on TR."PERSONAL_SERIAL_ID"=SUBID."SUBJECT_ID"
inner join "io_S1"."tc_history" AS TC
on TC."SUBJECT_CITIZEN_ID"=SUBID."SUBJECT_CITIZEN_ID"
) AS TT
WHERE "SUBJECT_CITIZEN_ID"=TT."SUBJECT_CITIZEN_ID";

答案 1 :(得分:0)

别名使用的“ SUBID”不在范围内,因此from子句无法识别它。最好将常规约定用作“ TableName.ColumnName”,因为两个表具有相同的列名。