关于创建一个交叉点/链接表,我正在背负this question。很清楚如何创建联结表,但我担心如何用数据填充联结表。用两个其他表(电影,作家)之间的数据填充连接表(movie_writer_junction)的最简单和/或最好的方法是什么?
CREATE TABLE movie
(
movie_id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
movie_name NVARCHAR(100),
title_date DATE
);
CREATE TABLE writer
(
writer_id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
writer_name NVARCHAR(100),
birth_date DATE
);
INSERT INTO movie
VALUES ('Batman', '2015-12-12'), ('Robin', '2016-12-12'),
('Charzard, the movie', '2018-12-12')
INSERT INTO writer
VALUES ('Christopher', '1978-12-12'), ('Craig', '1989-12-12'),
('Ash', '1934-12-12')
CREATE TABLE movie_writer_junction
(
movie_id INT,
writer_id INT,
CONSTRAINT movie_writer_pk
PRIMARY KEY(movie_id, writer_id),
CONSTRAINT movie_id_fk
FOREIGN KEY(movie_id) REFERENCES movie(movie_id),
CONSTRAINT writer_fk
FOREIGN KEY(writer_id) REFERENCES writer(writer_id)
);
最终的联结表目前是空的。这是一个简单的示例,您可以手动将数据填充到联结表中,但如果我有两个包含数百万行的表,那么这样的事情是如何完成的?
嗨,我猜这与你不能依赖身份列在不同地区相同的事实有关。
您可以将插入作为2 src表中的交叉连接编写
Insert junc_table (writer_id, movie_id)
Select writer_id , movie_id
from writer
CROSS Join
movie
where writer_name = 'Tolkien' and movie_name = 'Lord of the Ring'
这样,您始终可以从两个表中获得正确的代理键(标识)。使用一点动态SQL很容易为所有现有的联结组合生成SQL语句
另一种方法是使用SET IDENTITY_INSERT ON - 但这需要在加载其他2个表时完成,并且该船可能已经航行!