CREATE TABLE LOCATION(
street_address VARCHAR(40) NOT NULL,
postal_code VARCHAR(12) NOT NULL,
city VARCHAR(30) NOT NULL,
state_province VARCHAR(25) NULL,
country_name VARCHAR(40) NOT NULL,
CONSTRAINT LOCATION_PK PRIMARY KEY(street_address, postal_code, city,
country_name),
CONSTRAINT LOCATION_CK UNIQUE(street_address, city, state_province,
country_name),
CONSTRAINT LOCATION_FK FOREIGN KEY(country_name)
REFERENCES COUNTRY(country_name) );
CREATE TABLE DEPARTMENT(
department_name VARCHAR(30) NOT NULL,
street_address VARCHAR(40) NOT NULL,
postal_code VARCHAR(12) NOT NULL,
city VARCHAR(30) NOT NULL,
country_name VARCHAR(40) NOT NULL,
manager_id DECIMAL(6) NULL,
CONSTRAINT DEPARTMENT_PK PRIMARY KEY(department_name),
CONSTRAINT DEPARTMENT_FK1 FOREIGN KEY(street_address, postal_code, city,
country_name)
REFERENCES LOCATION(street_address, postal_code, city, country_name) );
CREATE TABLE COUNTRY(
country_name VARCHAR(40) NOT NULL,
region_name VARCHAR(25) NOT NULL,
CONSTRAINT COUNTRY_PK PRIMARY KEY(country_name),
CONSTRAINT COUNTRY_FK FOREIGN KEY(region_name)
REFERENCES REGION(region_name) );
我需要更新我的部门会计已移至新位置。新地址是马来西亚八打灵再也梳邦再也3 Subang 1。邮政编码是47500.我已经加入了这3个表,但它仍然无法正常工作。为什么?这是我的sql更新代码:
UPDATE DEPARTMENT a
INNER JOIN LOCATION b ON a.street address = b.street address
AND a.postal_code = b.postal_code
AND a.city=b.city
AND a.country_name = b.county_name
JOIN COUNTRY c
on b.country_name = c.country_name
SET a.street_address = 'subang 1 ,subang jaya ',
b.street_address = 'subang 1 ,subang jaya ',
a.postal_code = '31546',
b.postal_code = '31546',
a.city = 'PETALING JAYA ',
b.city = 'PETALING JAYA ',
a.country_name = 'MALAYSIA',
b.country_name = 'MALAYSIA',
c.country_name = 'MALAYSIA'
WHERE DEPARTMENT = 'Accounting';
它说无法更新,外键失败。无法删除或更新父行:a 外键约束失败
答案 0 :(得分:0)
你必须省略where
子句之前的最后一个逗号:
....
b.country_name = 'MALAYSIA' --no comma here
WHERE DEPARTMENT = 'Accounting';
答案 1 :(得分:0)
查看表格,您需要在最后一行上使用alias.column
WHERE.department_name ='会计'
答案 2 :(得分:0)
我必须从您发布的问题中做出几个假设。 如果假设不正确,请告诉我们。 首先,我必须根据[COUNTRY_FK]的外键引用创建另一个表[REGION]。
CREATE
TABLE REGION (
region_name VARCHAR(25) NOT NULL,
CONSTRAINT REGION_PK PRIMARY KEY(region_name)
);
接下来,我根据您的原始[UPDATE]重新构建了更新sql语句,以更新表[DEPARTMENT]
UPDATE DEPARTMENT
SET
street_address = 'subang 1 ,subang jaya ',
postal_code = '31546',
city = 'PETALING JAYA ',
country_name = 'MALAYSIA'
FROM DEPARTMENT a
INNER
JOIN LOCATION b ON a.street_address = b.street_address
AND a.postal_code = b.postal_code
AND a.city = b.city
AND a.country_name = b.country_name
JOIN COUNTRY c ON b.country_name = c.country_name
WHERE a.department_name = 'Accounting';
如果您尝试更新多个表,可以在[TRANSACTION]语句中构建更新。