我正在尝试在我的数据管理课程中为最终项目创建数据库。
我有四个表:客户,公园,旅行和评论
“customers”表只有两个重要的字段:customernumber(自动递增,主键)和名称。
“公园”表只有两个重要的字段:parknum(自动递增,主键)和名称。
“trip”表有三个字段,所有字段都很重要:customer(索引为外键,引用“customers”表中的customernumber字段),park(索引为外键,引用parknum字段)在“公园”表中)和日期。
“comments”表有三个字段,所有字段都很重要:park(索引为外键,引用“parks”表中的parknum字段),customer(索引为外键,引用customernumber字段)来自“客户”表)和评论。
我的目标是创建一个显示以下字段的SQL查询:customer(name),park(name),trips(date)和comments(comments)。
我尝试了很多不同的查询,他们要么以重复的顺序显示所有客户,所有公园,所有旅行以及该特定公园的评论...或者显示零结果< / p>
我已经完成了所有课本和在线资源之间的所有研究,但我似乎无法找到对我有用的东西。
答案 0 :(得分:0)
我认为您构建评论表的方式存在轻微问题。您目前拥有它的方式,客户每个公园只能有一个评论。如果客户两次访问同一部分,他们就不能留下第二条评论。相反,您可能希望评论引用行程编号。
还有一些其他事情并非100%明确您的问题。例如,我假设你想要每行一行,而不是每个客户一行,但你的问题是你想要“旅行”(复数)。此外,还不清楚评论是强制性的还是可选的,如果你想在没有评论的情况下看到一行旅行。
假设您对评论表进行了建议的更改,并假设评论是可选的,并且您希望即使没有评论也能看到行程,我认为这样做可以解决问题:
SELECT customers.name as customer, park.name as park, trips.date as trip, comments
FROM
(customers JOIN trips ON (customers.customer = trips.customer) JOIN parks ON
(parks.parknum = trips.park)) LEFT JOIN comments on (comments.id = trips.comment_id;