【问题标题】:Join table on already joined table在已连接的表上连接表
【发布时间】:2013-05-17 15:51:30
【问题描述】:

我正在努力整理一个连接 3 个表的 select 语句。

这是数据库:

CREATE TABLE Beerstyles
(
  style_id     INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  style_name   VARCHAR(50) NOT NULL
)ENGINE=InnoDB;

CREATE TABLE Breweries
(
  brew_id   INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  booth_num VARCHAR(10) NOT NULL,
  brew_name VARCHAR(50) NOT NULL
)ENGINE=InnoDB;

CREATE TABLE Beers
(
  beer_id      INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  beer_name    VARCHAR(50) NOT NULL,
  alc_vol      DECIMAL(2,1) NOT NULL,
  fk_style_id  INT NOT NULL,
  fk_brew_id   INT NOT NULL
)ENGINE=InnoDB;

CREATE TABLE Favorites
(
  fav_id      INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  user_id     VARCHAR(55) NOT NULL,
  fk_beer_id  INT NOT NULL,
  fav_comment VARCHAR(255)
)ENGINE=InnoDB;


ALTER TABLE Beers ADD CONSTRAINT FK_BeerStyle_Style FOREIGN KEY (fk_style_id) REFERENCES    Beerstyles (style_id);
ALTER TABLE Beers ADD CONSTRAINT FK_BeerBrew_Brew FOREIGN KEY (fk_brew_id) REFERENCES Breweries (brew_id);
ALTER TABLE Favorites ADD CONSTRAINT FK_FavBeer_Beer FOREIGN KEY (fk_beer_id) REFERENCES Beers (beer_id);

这是第一部分:

SELECT * FROM Favorites JOIN Beers ON Favorites.fk_beer_id = Beers.beer_id

我需要混合 brew_name,但无法正确设置。当我尝试加入 Breweries (ON Favorites.fk_brew_id = Breweries.brew_id) 时,我收到一条错误消息:“'on clause' 中的未知列 'Favorites.fk_brew_id'”

希望你们能帮帮我:)

【问题讨论】:

  • 您的Favorites 列是fk_beer_id,而不是fk_brew_id

标签: mysql database join


【解决方案1】:

Favorite 表中没有fk_brew_id,但您必须将JOIN 条件添加到Beers 表而不是Favorite 表中,如下所示:

SELECT 
  bw.brew_name,
  b.beer_name,
  f.fav_comment,
  ...
FROM Favorites       AS f
INNER JOIN Beers     AS b  ON f.fk_beer_id = b.beer_id
INNER JOIN Breweries AS bw ON b.fk_brew_id = bw.brew_id;

【讨论】:

    【解决方案2】:
    SELECT * 
    FROM Favorites 
    JOIN Beers 
       ON Favorites.fk_beer_id = Beers.beer_id
    JOIN Breweries 
       ON Beers.fk_brew_id = Breweries.brew_id
    

    当然在现实生活中你不应该使用 select *。当您进行连接时,您会重复列并导致查询速度变慢。

    【讨论】:

    • 谢谢!我进行了更改以避免'SELECT *':SELECT user_id, beer_name, alc_vol, brew_name, style_name FROM (SELECT * FROM Favorites JOIN Beers ON Favorites.fk_beer_id = Beers.beer_id JOIN Breweries ON Beers.fk_brew_id = Breweries.brew_id JOIN Beerstyles ON Beers.fk_style_id = Beerstyles.style_id ) 我仍然不明白最后的字母是如何工作的..
    猜你喜欢
    • 1970-01-01
    • 2013-01-30
    • 2018-04-24
    • 2015-03-24
    • 2016-07-13
    • 2017-11-17
    • 2011-07-24
    • 2021-12-04
    • 2020-07-25
    相关资源
    最近更新 更多