MySQL选择如何加入

MySQL选择如何加入,mysql,select,Mysql,Select,我在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, nombreCiud

我在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课程,任何建议都将不胜感激

我需要展示一家餐厅的菜名、电话号码、住址列表,在那里他们有一份菜单,上面有三个柏拉图的“阿罗斯·布鲁特”、“波塞拉”、“皮贾马”

我已经做了三个不同的选择,我的想法是想找到一种方式加入他们,但我不知道这将如何工作

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';
如果我是正确的,您还应该将柏拉图表加入查询。我没有看到你在你的例子中这样做,所以希望这是可行的


这解释了更多关于您可以进行的不同连接的信息

发布DDL的伟大工作,谢谢!现在,通过回答问题并以插入语句的形式提供样本数据以及以表格文本形式提供样本数据的所需结果来完成。您好,非常感谢您的回答,添加Plato是什么意思,以及它是如何工作的?如果我理解您的表,请更正Plato表中包含的唯一碟。通常,您将主键放在数字类型上,如number或smallint,而不是varchar。如果你想调整它,你改变它如下。然后,我将向Plato表中添加一个“idPlato”SMALLINT,并将其作为主键,然后向nombrePlato表中添加唯一约束。然后将Menu.PrimerPlato、Menu.SegundoPlato和Menu.Postre更改为SMALLINT而不是VARCHAR。您的select语句将如下所示:选择r.nombrest、r.telefono,r.IDRestaurant=s.IDRestaurant加入菜单m.idServicio=s.idServicio其中m.PrimerPlato=从柏拉图中选择idPlato,其中nombrePlato='Arros Brut'和m.SegundoPlato=从柏拉图中选择idPlato,nombrePlato='Porcella',m.Postre=从柏拉图中选择idPlato其中nombrePlato=Pijama';