我正在尝试运行此查询,但无法正常工作。有人可以找出问题所在吗?
CREATE TABLE Hasagenre
(
movieId INTEGER ,
genreId INTEGER ,
FOREIGN KEY (movieId) REFERENCES Movies ,
FOREIGN KEY (genreId) REFERENCES Genres ,
PRIMARY KEY movieId
) ;
答案 0 :(得分:1)
创建外键约束的语法是错误的。还应该在外键表上指定列名。
CREATE TABLE Hasagenre
(
movieId INTEGER PRIMARY KEY,
genreId INTEGER ,
FOREIGN KEY (movieId) REFERENCES Movies(Column_name)
FOREIGN KEY (genreId) REFERENCES Genres(column_name)
);
答案 1 :(得分:1)
在SQL中引用另一个表时,重要的是同时给出主表和被引用表的列名,您将使用它们绑定两个表。因此,连同表格电影,流派等的名称,也要提供公用的列名称。假设表movie和genre分别具有一列movieNo和genreNo,我们可以编写查询。
正确的查询将是:
create table hasagenre
( movieId INTEGER,
genreId INTEGER,
Foreign Key (movieId) references Movies (movieNo),
Foreign Key (genreId) references Genre (genreNo),
Primary Key (movieId)
)
答案 2 :(得分:0)
缺少外键约束中的列:
CREATE TABLE Hasagenre
(
movieId INTEGER ,
genreId INTEGER ,
FOREIGN KEY (movieId) REFERENCES Movies(xxx) ,
FOREIGN KEY (genreId) REFERENCES Genres(xxx) ,
PRIMARY KEY movieId
) ;
答案 3 :(得分:0)
到目前为止,人们说您必须指定要引用的列名。好吧,这并不完全正确。我想这取决于您使用的数据库(未指定)。
这是一个基于Oracle的示例,它表明您当然不必这样做。当然,您要引用的列必须是主键或唯一键。
SQL> create table movies
2 (movieno number primary key, --> primary key, which can then be referenced ...
3 name varchar2(20));
Table created.
SQL> create table hasagenre
2 (movieid number,
3 foreign key (movieid) references movies --> ... while creating a foreign key
4 );
Table created.
SQL>
答案 4 :(得分:0)
您必须将这些列括在括号中的主键约束中。
CREATE TABLE HASAGENRE
(MOVIEID INTEGER,
...
PRIMARY KEY (MOVIEID));