【发布时间】:2019-12-03 08:22:25
【问题描述】:
我已经深入搜索了论坛,但我没有看到这个具体案例的答案。 考虑这个数据模型:
我只想获取所有房间都没有花的建筑物名称(其中 Flower.Name = null)。
如果我有例子
建筑 1. 房间 1. 花 1
1号楼。1号房间。没有花(空)
建筑 2. 房间 1. 花 1
建筑 2. 房间 2. 花 2
3 号楼。1 号房间。没有花(空)
3号楼。2号房间。没有花(空)
我希望只看到 Building 3 的结果。
我问了这个问题:
SELECT Building.Name, Room.Name, Flower.Name FROM Building
JOIN Room ON Building.BuildingID = Room.BuildingID
JOIN Flower ON Room.RoomID = Flower.RoomID
WHERE Flower.Name IS NULL;
但它也列出了 1 号楼作为结果,因为 1 号楼有一个没有花的房间。而我想看到的只是所有房间都没有花的建筑物。
谁能给我一个提示?我在 MAMP 上使用 MySQL。
=================================== 编辑:
CREATE TABLE Building(
BuildingID int NOT NULL AUTO_INCREMENT,
Name varchar(20),
CONSTRAINT BuildingID_PK PRIMARY KEY(BuildingID));
CREATE TABLE Room(
RoomID int NOT NULL AUTO_INCREMENT,
BuildingID int,
Name varchar(20),
CONSTRAINT RoomID_PK PRIMARY KEY(RoomID),
CONSTRAINT BuildingID_FK FOREIGN KEY (BuildingID) REFERENCES Building(BuildingID));
CREATE TABLE Flower(
FlowerID int NOT NULL AUTO_INCREMENT,
RoomID int,
Name varchar(20),
CONSTRAINT FlowerID_PK PRIMARY KEY(FlowerID),
CONSTRAINT RoomID_FK FOREIGN KEY (RoomID) REFERENCES Room(RoomID));
-- Now data:
INSERT INTO Building (Name) VALUES ("Building 1");
INSERT INTO Building (Name) VALUES ("Building 2");
INSERT INTO Building (Name) VALUES ("Building 3");
INSERT INTO Room(BuildingID, Name) VALUES (1, "Room1");
INSERT INTO Room(BuildingID, Name) VALUES (1, "Room2");
INSERT INTO Room(BuildingID, Name) VALUES (2, "Room1");
INSERT INTO Room(BuildingID, Name) VALUES (2, "Room2");
INSERT INTO Room(BuildingID, Name) VALUES (3, "Room1");
INSERT INTO Room(BuildingID, Name) VALUES (3, "Room2");
INSERT INTO Flower(RoomID, Name) VALUES (1, "Flower 1");
INSERT INTO Flower(RoomID, Name) VALUES (2, null);
INSERT INTO Flower(RoomID, Name) VALUES (3, "Flower 1");
INSERT INTO Flower(RoomID, Name) VALUES (4, "Flower 2");
INSERT INTO Flower(RoomID, Name) VALUES (5, null);
INSERT INTO Flower(RoomID, Name) VALUES (6, null);
我希望这张表只列出 3 号楼:
SELECT Building.Name, Room.Name, Flower.Name FROM Building JOIN Room ON Building.BuildingID = Room.BuildingID JOIN Flower ON Room.RoomID = Flower.RoomID WHERE Flower.Name IS NULL;
姓名姓名姓名
1 号楼 Room2 空
3 号楼 Room1 NULL
3 号楼 Room2 空
【问题讨论】:
-
向我们展示一些示例表数据和预期结果。 (作为格式化文本,没有图像。)另请阅读minimal reproducible example。