mysql - MySQL SELECTs 如何加入
问题描述
我在 MySQL 数据库上有这些表:
CREATE TABLE Restaurante(
nombreRest VARCHAR(30) NOT NULL,
telefono INT(9) NOT NULL,
domicilio VARCHAR(50) NOT NULL,
nTenedores ENUM('1','2','3','4','5') NOT NULL,
tipoCocina VARCHAR(15) NOT NULL,
nombreCiudad VARCHAR(30) NOT NULL,
idRestaurante SMALLINT NOT NULL,
PRIMARY KEY (idRestaurante),
FOREIGN KEY (tipoCocina) REFERENCES tipoCocina(tipoCocina),
FOREIGN KEY (nombreCiudad) REFERENCES Ciudad(nombreCiudad)
)
CREATE TABLE Servicio(
idServicio SMALLINT NOT NULL,
precioT DOUBLE(2,2) NOT NULL,
franjaServicio VARCHAR(10) NOT NULL,
cafe BOOLEAN,
beINbida BOOLEAN,
fecha DATE NOT NULL,
idRestaurante SMALLINT NOT NULL,
PRIMARY KEY (idServicio),
FOREIGN KEY (idRestaurante) REFERENCES Restaurante(idRestaurante)
)
CREATE TABLE Plato(
nombrePlato VARCHAR(30) NOT NULL,
descripción VARCHAR(150) NOT NULL,
idRestaurante SMALLINT NOT NULL,
PRIMARY KEY (nombrePlato),
FOREIGN KEY (idRestaurante) REFERENCES Restaurante(idRestaurante)
)
CREATE TABLE Menu(
idServicio SMALLINT NOT NULL,
PrimerPlato VARCHAR(30) NOT NULL,
SegundoPlato VARCHAR(30) NOT NULL,
Postre VARCHAR(30) NOT NULL,
FOREIGN KEY (idServicio) REFERENCES Servicio(idServicio),
FOREIGN KEY (PrimerPlato) REFERENCES Plato(nombrePlato),
FOREIGN KEY (SegundoPlato) REFERENCES Plato(nombrePlato),
FOREIGN KEY (Postre) REFERENCES Plato(nombrePlato),
PRIMARY KEY (idServicio)
)
(不知道他们是否好,只是参加我关于 DB 的第一门课程,任何建议将不胜感激)
我需要显示餐厅的 nombreRest、telefono、domicilio 的列表,他们有这三个柏拉图('Arros Brut'、'Porcella'、'Pijama')的菜单。
我做了三个不同的选择,我的想法是想办法以某种方式加入他们,但我不知道那会如何工作。
SELECT idServicio
FROM Menu
WHERE PrimerPlato = 'Arros Brut' AND SegundoPlato = 'Porcella' AND Postre = 'Pijama'
SELECT idRestaurante
FROM Servicio
WHERE Servicio.idRestaurante = idServicio
SELECT (nombreRest, telefono, domicilio)
FROM Restaurante
WHERE Restaurante.idRestaurante = idRestaurante
解决方案
您应该使用标记为外键的属性来连接另一个表。这个外键对应另一个表的主键。
例如:
SELECT r.nombreRest, r.telefono, r.domicilio
FROM Restaurante r
JOIN Servicio s
ON r.idRestaurante = s.idRestaurante
JOIN Menu m
ON m.idServicio = s.idServicio
WHERE m.PrimerPlato = 'Arros Brut'
AND m.SegundoPlato = 'Porcella'
AND m.Postre = 'Pijama';
如果我是正确的,您还应该将柏拉图表加入查询。我没有看到你在你的例子中这样做,所以希望这有效。
该网站解释了更多关于您可以进行的不同连接的信息
推荐阅读
- c - 找不到 __vfs_read() 函数在 Linux 内核中调用 ext4_file_read_iter() 函数的位置
- python - Django:AttributeError:“MoneyField”对象没有属性“related_model”
- c# - Windows 桌面应用程序的理想启动时间
- javascript - ES6 根据字符串值创建单独的数组
- javascript - 无法在 Javascript 中获取输入值
- gensim - 如何以二进制和文本格式保存 fasttext 模型?
- sql - 插入后如何刷新GridView
- python - 如何使用 Selenium Webdriver 的 Control + Click 在同一窗口的新选项卡中打开嵌入在主选项卡中的 Web 元素中的链接
- java - 删除 MPAndroidChart 中的条形图列名称
- javascript - 选择菜单中的字体真棒