如何使用另一个表中的空值将数据添加到列中?

问题描述 投票:0回答:1

我正在尝试使用收集的数据填充表格。

我有三个表,INCIDENT_MAIN,INCIDENT_REPORT和PROJECT_PROFILE。

我必须从INCIDENT_MAIN和INCIDENT_REPORT提供的数据中填写PROJECT_PROFILE表。

这是我做INNER JOIN的查询

INSERT INTO PROJECT_PROFILE (INCIDENT_REPORT_ID, PROJECT_NAME,PROJECT_TYPE, PROJECT_PHASE, PROJECT_START_DATE,PROJECT_END_DATE,DOMESTIC_INTERNATIONAL,PROJECT_FACILITIES_LOGISTIC)
  SELECT PROJECT_NAME, PROJECT_TYPE, PROJECT_PHASE, PROJECT_START_DATE, ESTIMATED_PROJECT_END_DATE, DOMESTIC_INTERNATIONAL, PROJECT_FACILITIES_LOGISTIC
  FROM INCIDENT_MAIN INCIDENT_REPORT_ID
  INNER JOIN INCIDENT_REPORT ON INCIDENT_REPORT.INCIDENT_REPORT_ID = PROJECT_PROFILE.INCIDENT_REPORT_ID

我收到多部分标识符'PROJECT_PROFILE.INCIDENT_REPORT_ID'的错误信息不能被绑定

所以我决定首先使用INCIDENT_REPORT_ID填充PROJECT_PROFILE表,以便我可以从INCIDENT_REPORT表中收集INCIDENT_REPORT_ID的数据。 PROJECT_PROFILE_ID是自动增量,因为我将其设置为IDENTITY KEY。

数据插入就好了。结果如下。

enter image description here

234行受影响。

现在,我尝试用INCIDENT_MAIN中的数据替换NULL值

这是查询

INSERT INTO PROJECT_PROFILE (PROJECT_NAME,PROJECT_TYPE, PROJECT_PHASE, PROJECT_START_DATE,PROJECT_END_DATE,DOMESTIC_INTERNATIONAL,PROJECT_FACILITIES_LOGISTIC)
  SELECT PROJECT_NAME, PROJECT_TYPE, PROJECT_PHASE, PROJECT_START_DATE, ESTIMATED_PROJECT_END_DATE, DOMESTIC_INTERNATIONAL, PROJECT_FACILITIES_LOGISTIC
  FROM INCIDENT_MAIN
  WHERE PROJECT_PROFILE_ID >='1'

但是现在,数据形式INCIDENT_MAIN被插入234的最后一行,这使得PROJECT_PROFILE_ID增加并且NULL VALUES不被替换。

enter image description here

执行查询的正确方法是什么,以便可以用实际数据替换NULL值,并且PROJECT_PROFILE_ID中没有增量。

EDITED

所以,我按照建议尝试了这个更新查询

UPDATE PROJECT_PROFILE
SET PROJECT_PROFILE.PROJECT_NAME = INCIDENT_MAIN.PROJECT_NAME,
PROJECT_PROFILE.PROJECT_PHASE = INCIDENT_MAIN.PROJECT_PHASE,
PROJECT_PROFILE.PROJECT_START_DATE = INCIDENT_MAIN.PROJECT_START_DATE,
PROJECT_PROFILE.PROJECT_END_DATE = INCIDENT_MAIN.ESTIMATED_PROJECT_END_DATE,
PROJECT_PROFILE.DOMESTIC_INTERNATIONAL = INCIDENT_MAIN.DOMESTIC_INTERNATIONAL,
PROJECT_PROFILE.PROJECT_FACILITY_LOGISTIC = INCIDENT_MAIN.PROJECT_FACILITIES_LOGISTIC
FROM PROJECT_PROFILE JOIN INCIDENT_MAIN ON
PROJECT_PROFILE.PROJECT_NAME= INCIDENT_MAIN.PROJECT_NAME
WHERE PROJECT_PROFILE.PROJECT_PROFILE_ID <='234'

得到(0行受影响)

sql-server
1个回答
1
投票

不知道你的表架构,我只是在猜...

我已将JOIN条件更改为INCIDENT_REPORT.INCIDENT_REPORT_ID = INCIDENT_MAIN.INCIDENT_REPORT_ID。如果列名错误,请相应修改

INSERT INTO PROJECT_PROFILE 
            (
                -- INCIDENT_REPORT_ID,  remove this line
                PROJECT_NAME,
                PROJECT_TYPE, 
                PROJECT_PHASE, 
                PROJECT_START_DATE,
                PROJECT_END_DATE,
                DOMESTIC_INTERNATIONAL,
                PROJECT_FACILITIES_LOGISTIC
            )
SELECT     PROJECT_NAME, 
           PROJECT_TYPE, 
           PROJECT_PHASE,  
           PROJECT_START_DATE, 
           ESTIMATED_PROJECT_END_DATE, 
           DOMESTIC_INTERNATIONAL, 
           PROJECT_FACILITIES_LOGISTIC
FROM       INCIDENT_MAIN INCIDENT_REPORT_ID
INNER JOIN INCIDENT_REPORT 
        ON INCIDENT_REPORT.INCIDENT_REPORT_ID = INCIDENT_MAIN.INCIDENT_REPORT_ID 

我的建议是,不要插入表中。首先执行查询,从SEELCT到结束。确保结果符合您的要求。然后添加INSERT语句。

© www.soinside.com 2019 - 2024. All rights reserved.