首页 > 解决方案 > 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

标签: mysqlselect

解决方案


您应该使用标记为外键的属性来连接另一个表。这个外键对应另一个表的主键。

例如:

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';

如果我是正确的,您还应该将柏拉图表加入查询。我没有看到你在你的例子中这样做,所以希望这有效。

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


推荐阅读