2016-09-20 3 views
-1

С ниже таблиц, я пытаюсь ответить на этот вопрос, и я понятия не имею, как ответить на него:Вставка внешнего ключа в таблицу SQL

«Показать сумму HoursWorked для каждого типа владельца, но без учета услуг сотрудников, которые имеют ExperienceLevel of Junior и исключают любой тип с менее чем тремя членами ».

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? –

+0

, когда я пытаюсь вставить данные в таблицу PROPERTY и SERVICE, он говорит, что количество столбцов не совпадает с количеством данных, которые у меня есть в инструкции INSERT. –

ответ

0

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

Вы должны сказать, кто является владельцем, вставка не знает, что.

здесь я Ассинг каждое свойство 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 должны заполнять себя, что они делают; однако по какой-то причине мне приходится вручную вводить данные PropertyID в операторы INSERT, когда мне не нужно указывать –

2

Колонны OwnerID в Property таблице и PropertyId и EmployeeID в Service таблице неприятности для вас.

Ниже приводятся причины этого.

1) Все указанные столбцы установлены как NOT NULL. Таким образом, эти столбцы всегда ожидают значения для каждой вставки.

2) Кроме того, в таблице «услуги» колонками PropertyId и EmployeeID являются часть составного первичного ключа. Первичный ключ не допускает значений 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

. Вы можете установить ограничение NULL для OwnerID в таблице свойств, если вы обновляете OwnerId после вставки данных, как указано в вашем query.You не может установить значение NULL для свойстваd и EmployeeID в таблице Service, так как они являются частью первичного ключа. Таким образом, ваша вставка не удастся. –

+0

, если вы хотели сделать вставки, как вы упомянули, вам нужно удалить столбец (propertyd и EmployeeID) из ограничения первичного ключа и установить значения по умолчанию для столбцов «NULL» для всех трех столбцов (OwnerID, PropertyID и EmployeeID). Если вы хотите сохранить все эти ограничения как таковые, вам необходимо передать необходимые значения для этих столбцов с помощью самого запроса INSERT. –

0

эй проблема Лука, что в значениях значений запросов вставки не соответствует количеству столбцов таблиц. , если вы хотите использовать преимущество свойства Auto increment write write insert с именами столбцов. и столбец «OwnerID» в таблице PROPERTY и «EmployeeID» в таблице SERVICE не могут быть пустыми, поскольку вы ограничены в создании таблицы.

Смежные вопросы