2016-09-20 29 views
-1

、私はこの質問に答えるためにしようとしていると私はそれに答えるためにどのよう見当がつかない:SQLテーブルに外部キーを挿入

「OWNERの種類ごとにHoursWorkedの合計を表示しますが、のサービスを除外ジュニアのエクスペリエンスレベルを持ち、3人未満のメンバーでタイプを除外している従業員。

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

クエリを共有します。それは問題ではないようです。所有者テーブルの最後に挿入されたIDを取得しようとしましたか? –

+0

PROPERTYとSERVICEテーブルにデータを挿入しようとすると、列数がINSERTステートメントにあるデータの数と一致しないことがわかります –

答えて

0

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

あなたは所有者が誰であるかを言う必要がインサートdoesntのはそれを知っています。 Service表中のProperty表とPropertyIdEmployeeID

ここで私は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は、自分自身に移入することになっています。しかし、何らかの理由で私は –

2

にすべてのプロパティをASSING列OwnerIDはあなたのためのトラブルを作っています。

これが理由です。

1)上記の列はすべてNOT NULLに設定されています。したがって、これらの列 は常にすべての挿入に値を期待しています。

2)また、 'サービス'テーブルでは、PropertyIdEmployeeIDの列は、複合プライマリキーの一部である です。主キーはNULLの値を許可しません。

3)あなたはポイント1と2を処理したら、あなたは以下の

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にを更新している場合は、プロパティテーブルにOWNERIDためNULL制約を設定することができたときに、手動でINSERT文でPropertyIDデータを入力する必要があなたの主キーの一部であるため、NULL値をpropertydとServiceテーブルのEmployeeIDに設定することはできません。挿入が失敗します。 –

+0

あなたが述べたように、あなたが挿入を作りたいと思った場合、あなたは主キー制約から列(propertydと社員)を削除すると、すべての3つの列(OWNERID、PropertyIDおよび社員)のための「NULL」に列のデフォルトを設定する必要があります。これらの制約をそのまま維持したい場合は、INSERTクエリ自体でこれらの列に必要な値を渡す必要があります。 –

0

ちょっとルークの問題があることであるように、あなたのINSERTクエリで 言及列によって、インサートを作ることができます挿入クエリの値countがテーブルのカラムカウントと一致しません。 自動増分プロパティを使用して、列名を使用して挿入クエリを使用したい場合。 PROPERTYテーブルの 'OwnerID'列とSERVICEテーブルの 'EmployeeID'列は、テーブルの作成を制限しているため、nullにできません。

関連する問題