这是我第一次在论坛上发帖,因为我之前从未走过这条路,试图确定我到底错过了什么。
这就是我要做的事情: 编写一个SQL查询来显示每个学生可以去的所有餐厅,并且至少有一个他们喜欢的甜点。即,如果餐馆有人喜欢的甜点,那么该人可以去那家餐馆。 这就是我目前为数据库所拥有的(表,字段,复合表等):
create table Student
(
StudentID int primary key not null
, LastName nvarchar (20) not null
, FirstName nvarchar (20) not null
)
create table Dessert
(
DessertID int primary key not null
, DessertName nvarchar (25) not null
)
create table Restaurant
(
RestaurantID int primary key not null
, RestaurantName nvarchar (20) not null
, RestaurantStreet nvarchar (20) not null
, RestaurantCity nvarchar (20) not null
, RestaurantState nvarchar (2) not null
, RestaurantZipCode nvarchar (5) not null
)
create table StudentDessert
(
StudentID int
, DessertID int
, primary key (StudentID, DessertID)
, foreign key (StudentID) references Student(StudentID)
, foreign key (DessertID) references Dessert(DessertID)
)
create table RestaurantDessert
(
RestaurantID int
, DessertID int
, primary key (RestaurantID,DessertID)
, foreign key (restaurantID)references Restaurant(RestaurantID)
, foreign key (DessertID) references Dessert(DessertID)
)
这可能是我得到的最接近但它仍然会产生太多数据:
select restaurantname, studentID, dessertid
from restaurant, studentdessert
where dessertid != 0
请帮助改进此查询?
答案 0 :(得分:0)
这实际上取决于您希望结果的外观,但这是一个简单的查询,可以让您朝着正确的方向前进:
SELECT DISTINCT
s.FirstName + ' ' + s.LastName AS 'StudentName'
,r.RestaurantName
FROM Student s
INNER JOIN StudentDessert sd ON sd.StudentID = s.StudentID
INNER JOIN dessert de ON de.DessertID = sd.DessertID
INNER JOIN RestaurantDessert rd ON rd.DessertID = sd.DessertID
INNER JOIN Restaurant r ON r.RestaurantID = rd.RestaurantID