2016-04-14 19 views
1

我在MySQL中創建了一個名爲Formed, Track, Album, Band, Customers的表,我使用MySQL Workbench。在Formed表中,我有一個樂隊成立的年份,樂隊成立的國家和城市以及樂隊成員。在Track表中,我有歌曲,曲目計數,專輯中有多少首歌曲,專輯的標題以及總曲目的持續時間。在Album表中,我有價格,標題和流派。在Band表中,我有唱片公司,在Customers表中,我有姓名,電話號碼,電子郵件以及他們是否已付款。通過MySQL中的特定樂隊獲取所有專輯

但是,我想嘗試創建一個SQL腳本,可以通過樂隊獲取所有專輯。我見過的唯一方法是通過使用

SELECT Albums,Band FROM Album; 

或者

SELECT * FROM Album; 

但我不是100%肯定,如果有這樣做的更好的,更有效的方式。

編輯

,我的代碼是:

SET FOREIGN_KEY_CHECKS=0; 

DROP TABLE IF EXISTS Formed; 
DROP TABLE IF EXISTS Album; 
DROP TABLE IF EXISTS Band; 
DROP TABLE IF EXISTS Customers; 
DROP TABLE IF EXISTS Track; 

SET FOREIGN_KEY_CHECKS=1; 

CREATE TABLE Formed(
    FormedID int AUTO_INCREMENT, 
    YearFormed int, 
    CountryFormed varchar(50), 
    CityFormed varchar(50), 
    BandMembers varchar(400), 
    PRIMARY KEY(FormedID)) 
    ENGINE=InnoDB; 

CREATE TABLE Track (
    TrackID int AUTO_INCREMENT, 
    AlbumID int, 
    Songs varchar(200), 
    TrackNumber varchar(20), 
    Title varchar(30), 
    TrackDuration varchar(6), 
    PRIMARY KEY(TrackID)) 
    ENGINE=InnoDB; 

CREATE TABLE Album(
    AlbumID int AUTO_INCREMENT, 
    TrackID int, 
    BandID int, 
    KEY(TrackID), 
    KEY(BandID), 
    Price int, 
    PublicationDate varchar(11), 
    Title varchar(30), 
    Genre varchar(36), 
    PRIMARY KEY(AlbumID)) 
    ENGINE=InnoDB; 

CREATE TABLE Band(
    BandID int AUTO_INCREMENT, 
    AlbumID int, 
    KEY(AlbumID), 
    RecordLabel varchar(50), 
    PRIMARY KEY(BandID)) 
    ENGINE=InnoDB; 

CREATE TABLE Customers (
    CustomerID int AUTO_INCREMENT, 
    CName varchar(20), 
    CPhone varchar(12), 
    CEmail varchar(50), 
    CPPaid varchar(50), 
    CPDate date, 
    PRIMARY KEY (CustomerID)) 
    ENGINE=InnoDB; 

ALTER TABLE Track 
ADD FOREIGN KEY (AlbumID) REFERENCES Album(AlbumID)ON DELETE SET NULL ON UPDATE CASCADE; 

ALTER TABLE Album 
ADD FOREIGN KEY (TrackID) REFERENCES Track(TrackID)ON DELETE SET NULL ON UPDATE CASCADE; 

ALTER TABLE Album 
ADD FOREIGN KEY (BandID) REFERENCES Band(BandID)ON DELETE SET NULL ON UPDATE CASCADE; 

ALTER TABLE Band 
ADD FOREIGN KEY (AlbumID) REFERENCES Album(AlbumID)ON DELETE SET NULL ON UPDATE CASCADE; 
+0

如果您有一個適當的關係結構,你可以輕鬆地做到這一點。如果不是這是任何人的猜測。什麼模式正在使用這些? – tadman

+0

@tadman模式?我正在使用名爲'Tables'的架構。 – smitthy

+1

什麼是'Formed'?一個'樂隊'只形成一次。因此'Formed'應該是'Band'中的一列。 「BandMembers」應該是一個單獨的表格。即你的模式是垃圾。 –

回答

2

使用連接,所以例如,如果你想爲一個特定的頻段標題:

Select a.Title from Album a 
Inner Join Band b on a.BandID = b.BandID 
Where a.BandID = X 
+0

所以我可以用它來顯示一個樂隊的所有專輯?因爲當我運行它時,我得到了'錯誤代碼:1052.列子句中'BandID'含糊不清' – smitthy

+0

編輯了我的答案。既然你在兩個表中都加入了BandID,我以前的例子並沒有告訴MySQL我想從哪個表中找到BandID。我假設它是上例中的Album表。而我的例子中的'X'就是你想要的標題的樂隊ID。 – dcreight

+0

謝謝,我想我已經得到它的工作:) – smitthy

相關問題