我有三张桌子:
电影[mID,title,year,director]
评级[rID(外键),mID(外键),星级,ratingDate]
审稿人[rID,姓名]
我必须在表格评分中插入评论,以及#34; James" (在表Reviewer中)给数据库中的每部电影5颗星,将ratingDate保留为" NULL"
到目前为止,我已经能够使用表格Movie中的每个mID加入James的rID。
SELECT * FROM (SELECT rID FROM reviewer WHERE name = "James") AS a LEFT JOIN (SELECT mID FROM movie) AS b ON 1=1;
我不知道如何将5星和NULL ratingDate添加到每个条目中,最后将所有这些添加到我的评级表中。
我的问题是,它是否可以在一个查询中完成(我想象的有多个子查询),或者我是否采取了错误的方法。这似乎是一个相对简单的问题,但我无法绕过它。
答案 0 :(得分:1)
试试这个:
INSERT INTO Rating(rID, mID, stars, ratingDate)
SELECT r.rID, m.mID, 5, NULL
FROM Movie m CROSS JOIN
(SELECT r.Rid
FROM Reviewer r
WHERE r.name = 'James'
) r
请注意以下事项:
insert
语句中明确列出。select
查询中的表格给出了别名,这些是表名的缩写。CROSS JOIN
,因为Movie
和Reviewer
之间确实没有连接条件。'James'
)用单引号括起来,而不是双引号。答案 1 :(得分:0)
这应该可以解决问题:
INSERT INTO Rating
SELECT
Reviewer.rID,
Movie.mID,
5,
NULL
FROM
Movie
INNER JOIN Reviewer ON Reviewer.name="James"
说明:
答案 2 :(得分:0)
- 根据您的要求插入数据: INSERT INTO评级(rid,mid,stars,ratingDate) SELECT r.rID, m.mID, 5, 空值 来自电影m JOIN Reviewer r ON(r.name =" James");
另外,如果你执行类似的" SELECT"我建议你输入以下索引。声明: 在Reviewer(name)上创建索引idx_reviewer_name;
我想提醒您将当前日期作为ratingDate字段的默认值。如果您需要自动插入评级日期,它可以帮助您确保数据库本身的当前日期。
感谢。