2013-05-17 41 views
1

我在拼湊加入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混合,但一直沒能得到它的權利。當我嘗試加入啤酒(ON Favorites.fk_brew_id = Breweries.brew_id)我得到一個錯誤說「‘上的條款’未知列‘Favorites.fk_brew_id’在」

希望你們能幫助我了:)

+0

您的收藏夾列是fk_beer_id而不是fk_brew_id。 –

回答

0
SELECT * 
FROM Favorites 
JOIN Beers 
    ON Favorites.fk_beer_id = Beers.beer_id 
JOIN Breweries 
    ON Beers.fk_brew_id = Breweries.brew_id 

當然是你shoudl從來沒有使用真實生活 選擇 *。當您有一個連接時,您正在重複列並導致查詢速度變慢。

+0

謝謝! 我做出了改變,以避免 'SELECT *': SELECT USER_ID,beer_name,alc_vol,brew_name,STYLE_NAME FROM (SELECT * FROM 收藏 JOIN比爾斯 ON Favorites.fk_beer_id = Beers.beer_id JOIN啤酒 ON Beers.fk_brew_id = Breweries.brew_id JOIN Beerstyles ON Beers.fk_style_id = Beerstyles.style_id )a 我還是不明白最後的字母是如何工作的。 –

3

有一個在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;