2016-09-20 90 views
-1

與下面的表,我想回答這個問題,我不知道如何回答呢:插入外鍵SQL表

「顯示HoursWorked的總和爲業主的每一個類型,但不包括的服務具有少年經驗等級的員工,排除少於三名成員的任何類型的員工。「

CREATE TABLE OWNER 
(
    OwnerID  Int    NOT NULL IDENTITY (1,1)  PRIMARY KEY, 
    OwnerName Char(30)  NOT NULL, 
    OwnerEmail VarChar(100) NULL, 
    OwnerType Char(15)  NOT NULL, 
); 

CREATE TABLE PROPERTY 
(
    PropertyID  Int   NOT NULL IDENTITY(1,1)  PRIMARY KEY, 
    PropertyName Char(30) NOT NULL, 
    Street   Char(20) NOT NULL, 
    City   Char(25) NOT NULL, 
    State   Char(10) NOT NULL, 
    Zip    Char(5)  NOT NULL, 
    OwnerID   Int   NOT NULL, 

    CONSTRAINT PROP_OWN_FK FOREIGN KEY(OwnerID) 
       REFERENCES OWNER(OwnerID), 
); 

CREATE TABLE GG_EMPLOYEE 
(
    EmployeeID  Int   NOT NULL IDENTITY(1,1)  PRIMARY KEY, 
    LastName  Char(35) NOT NULL, 
    FirstName  Char(35) NOT NULL, 
    CellPhone  Char(20) NOT NULL, 
    ExperienceLevel Char(25) NOT NULL, 
); 

CREATE TABLE SERVICE 
(
    PropertyID  Int   NOT NULL, 
    EmployeeID  Int   NOT NULL, 
    ServiceDate  Char(15) NOT NULL, 
    HoursWorked  Char(5)  NOT NULL, 

    CONSTRAINT SERVICE_PK PRIMARY KEY(PropertyID, EmployeeID, ServiceDate), 
    CONSTRAINT SER_PRO_FK FOREIGN KEY(PropertyID) 
       REFERENCES PROPERTY(PropertyID),       
    CONSTRAINT SER_GG_EMP_FK FOREIGN KEY(EmployeeID) 
       REFERENCES GG_EMPLOYEE(EmployeeID), 
); 

INSERT INTO OWNER 
VALUES ('Mary Jones', '[email protected]', 'Individual'); 

INSERT INTO OWNER 
VALUES('DT Enterprises', '[email protected]', 'Corporation'); 

INSERT INTO OWNER 
VALUES('Sam Douglas', NULL, 'Individual'); 

INSERT INTO OWNER 
VALUES('UNY Enterprises', '[email protected]', 'Corporation'); 

INSERT INTO OWNER 
VALUES('Doug Samuels', '[email protected]', 'Individual'); 

INSERT INTO PROPERTY 
VALUES('Eastlake Building', '123 Eastlake', 'Seattle', 'WA', '98119'); 

INSERT INTO PROPERTY 
VALUES('Elm St Apts', '4 East Elm', 'Lynwood', 'WA', '98223'); 

INSERT INTO PROPERTY 
VALUES('Jefferson Hill', '42 West 7th St', 'Bellevue', 'WA', '98007'); 

INSERT INTO PROPERTY 
VALUES('Lake View Apts', '1265 32nd Avenue', 'Redmond', 'WA', '98054'); 

INSERT INTO PROPERTY 
VALUES('Kodak Heights Apts', '65 32nd Avenue', 'Rochester', 'NY', '14604'); 

INSERT INTO PROPERTY 
VALUES('Private Residence', '1456 48th St', 'Bellevue', 'WA', '98007'); 

INSERT INTO PROPERTY 
VALUES('Private Residence', '1567 51st St', 'Bellevue', 'WA', '98007'); 

INSERT INTO PROPERTY 
VALUES('Private Residence', '718 151st St', 'Rochester', 'NY', '14604'); 

INSERT INTO GG_EMPLOYEE 
VALUES('Smith', 'Sam', '206-254-1234', 'Master'); 

INSERT INTO GG_EMPLOYEE 
VALUES('Evanston', 'John', '206-254-2345', 'Senior'); 

INSERT INTO GG_EMPLOYEE 
VALUES('Murray', 'Dale', '206-254-3456', 'Junior'); 

INSERT INTO GG_EMPLOYEE 
VALUES('Murphy', 'Jerry', '585-545-8765', 'Master'); 

INSERT INTO GG_EMPLOYEE 
VALUES('Fontaine', 'Joan', '206-254-4567', 'Senior'); 

INSERT INTO SERVICE VALUES('2015-05-05', '4.50'); 
INSERT INTO SERVICE VALUES('2015-05-08', '2.75'); 
INSERT INTO SERVICE VALUES('2015-05-08', '4.50'); 
INSERT INTO SERVICE VALUES('2015-05-19', '3.00'); 
INSERT INTO SERVICE VALUES('2015-05-12', '7.50'); 
INSERT INTO SERVICE VALUES('2015-05-10', '2.50'); 
INSERT INTO SERVICE VALUES('2015-05-19', '2.50'); 
INSERT INTO SERVICE VALUES('2015-05-15', '2.75'); 

如果有人可以請幫助我,那太棒了!

+2

什麼/哪裏是錯誤?請閱讀[** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t這裏是[** START **](http ://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/),瞭解如何提高您的問題質量並獲得更好的答案。 –

+0

分享查詢。這似乎不成問題。您是否嘗試獲取Owner表的最後一個插入的ID? –

+0

當我嘗試向PROPERTY和SERVICE表中插入數據時,它表示列數與我在INSERT語句中的數據數不匹配 –

回答

0

http://sqlfiddle.com/#!6/3ea54

你需要說誰是主人,插入犯規知道。

這裏我每個屬性assing到owner = 1

INSERT INTO PROPERTY VALUES('Eastlake Building', '123 Eastlake', 'Seattle', 'WA', '98119', 1); 
INSERT INTO PROPERTY VALUES('Elm St Apts', '4 East Elm', 'Lynwood', 'WA', '98223', 1); 
INSERT INTO PROPERTY VALUES('Jefferson Hill', '42 West 7th St', 'Bellevue', 'WA', '98007', 1); 
INSERT INTO PROPERTY VALUES('Lake View Apts', '1265 32nd Avenue', 'Redmond', 'WA', '98054', 1); 
INSERT INTO PROPERTY VALUES('Kodak Heights Apts', '65 32nd Avenue', 'Rochester', 'NY', '14604', 1); 
INSERT INTO PROPERTY VALUES('Private Residence', '1456 48th St', 'Bellevue', 'WA', '98007', 1); 
INSERT INTO PROPERTY VALUES('Private Residence', '1567 51st St', 'Bellevue', 'WA', '98007', 1); 
INSERT INTO PROPERTY VALUES('Private Residence', '718 151st St', 'Rochester', 'NY', '14604', 1); 
+0

OwnerID和EmployeeID應該填充它們自己,但是,由於某種原因,我必須在INSERT語句中手動輸入PropertyID數據,我不需要 –

2

OwnerIDProperty表和PropertyIdEmployeeIDService表你製造麻煩。

以下是原因。

1)所有提到的列設置爲NOT NULL。所以這些列 總是期望每個插入的值。

2)另外,在'服務'表中,列PropertyIdEmployeeID是 複合主鍵的一部分。主鍵不允許NULL值。

3)一旦你處理點1和2,您可以通過 提列插入你的INSERT查詢,如下面

INSERT INTO PROPERTY (PropertyName,Street,City,[State],Zip) 
VALUES('Eastlake Building', '123 Eastlake', 'Seattle', 'WA', '98119'); 

INSERT INTO [SERVICE] (ServiceDate,HoursWorked) 
VALUES('2015-05-05', '4.50'); 

enter image description here

+0

如果在插入數據後更新OwnerId,您可以在Property table中爲OwnerID設置NULL約束query.You不能將NULL值設置爲Service表中的propertyd和EmployeeID,因爲它們是主鍵的一部分。所以你的插入將失敗。 –

+0

如果您希望按照您所述進行插入操作,則需要從主鍵約束中移除列(propertyd和EmployeeID),併爲所有三列(OwnerID,PropertyID和EmployeeID)將列默認設置爲'NULL'。如果您想保留所有這些約束,則需要使用INSERT查詢本身傳遞這些列的所需值。 –

0

哎盧克的問題是,在插入查詢值中count與表的列數不匹配。 如果你想利用自動增量屬性寫插入查詢與列名的優勢。 和PROPERTY表中的'OwnerID'列和SERVICE表中的'EmployeeID'不能爲空,因爲您在創建表時受到限制。