Mysql 已联接表上的联接表
我正在努力拼凑一个连接3个表的select语句 以下是数据库:Mysql 已联接表上的联接表,mysql,database,join,Mysql,Database,Join,我正在努力拼凑一个连接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, boo
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_名称,但未能正确使用。当我试图加入Favorites.fk_brew_id=Breweries.brew_id上的Breweries时,我在“ON子句”中出现一个错误,称为未知列“Favorites.fk_brew_id”
希望你们能帮助我:收藏夹表中没有fk_brew_id,但您必须将连接条件添加到Beers表中,而不是添加到收藏夹表中,如下所示:
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;
当然,在现实生活中,你永远不应该使用select*。当您有一个连接时,您会重复列,导致查询速度变慢 您最喜欢的栏目是fk_beer_id,而不是fk_brew_id。谢谢!我做了一个更改以避免“选择*”:选择用户id、啤酒名称、alc音量、brew名称、,我仍然不明白信的结尾是怎么写的。我还不明白信的结尾是怎么写的。。
SELECT *
FROM Favorites
JOIN Beers
ON Favorites.fk_beer_id = Beers.beer_id
JOIN Breweries
ON Beers.fk_brew_id = Breweries.brew_id