Простой внешний ключ / Создать Просмотр вопроса

0

Что я делаю неправильно? Мне нужно создать внешний ключ, но код, начинающийся на CONSTRAINT, как-то не прав, также мне нужна помощь в моем представлении. Я думаю, что я неправильно делаю подзапрос, вы можете мне помочь?

CREATE TABLE dealer(
dealershipId CHAR(10),
phone CHAR(10),
dealershipName CHAR(10),
webAddress char (10),
street CHAR (10),
city char (10),
zip char (5),
mCapacity INT,
managerFName CHAR (10),
managerLName CHAR (10),
PRIMARY KEY (dealershipId));

CREATE TABLE automobiles(
autoId CHAR (4),
vehiclecode VARCHAR (15),
manufacturer VARCHAR(15),
model VARCHAR (20),
style VARCHAR (5),
color VARCHAR (10),
ownership VARCHAR (8),
PRIMARY KEY (autoId)
CONSTRAINT fkHasRep FOREIGN KEY (dealershipId)
REFERENCE dealer(dealershipId) ON DELETE RESTRICT
);

--7.
CREATE VIEW division AS
SELECT dealershipName, webAddress, phone
FROM dealer
WHERE  dealershipId IN
( SELECT  manufacturer, model, style, ownership
FROM automobiles);

--8.
SELECT phone, manufacturer, model
FROM division;
Теги:
view

4 ответа

1
Лучший ответ

Вам не хватает запятой между основным кедом и внешним ключом:

CREATE TABLE automobiles(
autoId CHAR (4),
vehiclecode VARCHAR (15),
manufacturer VARCHAR(15),
model VARCHAR (20),
style VARCHAR (5),
color VARCHAR (10),
ownership VARCHAR (8),
PRIMARY KEY (autoId),
CONSTRAINT fkHasRep FOREIGN KEY (dealershipId)
REFERENCE dealer(dealershipId) ON DELETE RESTRICT
);

Представления MySQL не разрешают подзапросы в представлениях (ошибка # 1349) - здесь описаны ограничения . Поэтому преобразуйте его вместо JOIN:

CREATE VIEW division AS
   SELECT d.dealershipName, d.webAddress, d.phone, a.*
     FROM DEALER d
     JOIN AUTOMOBILES a ON d.dealershipid IN (a.manufacturer, 
                                              a.model, 
                                              a.style, 
                                              a.ownership);
  • 0
    Спасибо, что починили запчасти, и мне тоже не хватало дилерского центра в таблице автомобилей. Теперь вы можете помочь мне с видом?
  • 0
    @Michael Quiles: смотрите обновление
Показать ещё 2 комментария
1

По умолчанию механизм Myisam не поддерживает внешние ключи. Укажите механизм Innodb в операторах CREATE TABLE.

CREATE TABLE dealer(
dealershipId CHAR(10),
phone CHAR(10),
dealershipName CHAR(10),
webAddress char (10),
street CHAR (10),
city char (10),
zip char (5),
mCapacity INT,
managerFName CHAR (10),
managerLName CHAR (10),
PRIMARY KEY (dealershipId)) ENGINE = Innodb;
1

Я предполагаю, что у вас нет идентификатора DealershipID на вашей таблице автомобилей.

И ваше представление не будет работать, поскольку вы можете включить только одно поле в свой вложенный запрос выбора. Возможно, вы могли бы переписать это для использования INNER или OUTER JOIN.

  • 0
    Это то, что я должен делать, используя подзапрос. Я считаю, что мы достигли чего-то похожего в классе, но это не было объяснено дальше. 7. Создайте ВИД, включающий поля из обеих таблиц в выбранной модели.
1

Вам нужна запятая после "PRIMARY KEY (autoId)", и это ССЫЛКИ, а не ССЫЛКА.

Вот пример из документации: http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/clauses002.htm#i1036780

С уважением, Роб.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню