2013-04-25 139 views
1

我對MySQL相當陌生,而且我正在努力通過表中指定的外鍵來查詢或引用主鍵。有人能解釋如何以相當簡單的方式來做到這一點,因爲考慮到我所搜索的所有內容都有點難以理解,因爲考慮到其他人的大多數人已經分配了更多的MySQL知識。從外鍵查詢主鍵

我們只是假設這些都是表:

CREATE TABLE IF NOT EXISTS customer(
    custID int AUTO_INCREMENT, 
    custLname varchar(30), 
    custAdd varchar(100), 
    custSuburb varchar(30), 
    custPcode varchar(4), 
    custState varChar(20), 
    custPhone varchar(10), 
    PRIMARY KEY (custID) 
)ENGINE = INNODB; 

CREATE TABLE IF NOT EXISTS tour(
    DailyTourID int, 
    tourDate DATE, 
    tourTime TIME, 
    tourName varchar(30), 
    tourDriverID int, 
    tourBusID varchar(2), 
    PRIMARY KEY (DailyTourID, tourDate), 
) ENGINE = INNODB; 

CREATE TABLE IF NOT EXISTS TourCustLink(
    TourCustLinkID int AUTO_INCREMENT, 
    TourID int, 
    TourDate DATE, 
    customerID int, 
    PRIMARY KEY (TourCustLinkID), 
    FOREIGN KEY (TourID, TourDate) REFERENCES tour(DailyTourID, tourDate), 
    FOREIGN KEY (customerID) REFERENCES customer(custID) 
) ENGINE = INNODB; 

我知道這是一個非常糟糕的例子,但可以說我想要顯示的custLname,custAdd,custPhone和tourDates爲每一個客戶。我怎麼做到這一點?

+0

@ http://www.w3schools.com/sql/sql_foreignkey.asp – swetha 2013-04-25 09:32:10

回答

1

JOIN他們:

SELECT 
    c.custLname, 
    c.custAdd, 
    c.custPhone, 
    t.TourDate, 
    t.TourName, 
    ... 
FROM TourCustLink AS tl 
INNER JOIN Customer AS c ON tl.customerId = c.custID 
INNER JOIN Tour  AS t ON tl.tourID  = t.DailyTourID 
         AND tl.tourDate = t.tourDate; 

您可能還需要使用OUTER JOIN S(LEFT JOINRIGHT JOIN)代替INNER JOIN,如果你要包括那些不匹配的行。

有關JOIN類型的詳細信息,請參閱這篇文章: