2013-03-15 76 views
1

我有兩個表連接在一起:MySQL「join as」?

table_diagram

book_types_purchasedENUM('paperback','hardcover')。我想要得到這種類型的行返回:

 
book_title | paperback_date_purchased | hardcover_date_purchased 

有沒有辦法在MySQL中做到這一點?


UPDATE

下面是從下面的答案與匹配表名和左,而不是加入:

SELECT title, 
    paperback.date_purchased AS paperback_date_purchased, 
    hardcover.date_purchased AS hardcover_date_purchased 

FROM book_projects 

LEFT JOIN book_types_purchased AS paperback 
    ON paperback.book_project_id = book_projects.id 
    AND paperback.type = 'paperback' 

LEFT JOIN book_types_purchased AS hardcover 
    ON hardcover.book_project_id = book_projects.id 
    AND hardcover.type = 'hardcover' 
+1

正如一邊:您可能想要最終重新考慮「book_types_purchased」的「ENUM」選項。例如,如果您將來需要添加數字或電子書「書籍類型」會怎樣? [這裏有一些更多的原因](http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/)... – summea 2013-03-15 19:42:21

+1

@summea感謝文章,好讀。多虧了這一點,我已經改變了我正在努力加入相關表格的模式中的所有ENUM字段。 – 2013-03-23 19:01:28

+0

對不起,額外的工作......但希望它可以幫助你從長遠來看... ...! – summea 2013-03-23 23:44:07

回答

4

可以JOINbook_types_purchased表的兩倍。每種類型一個。

SELECT title, 
    paperback.date_purchased AS paperback_date_purchased, 
    hardcover.date_purchased AS hardcover_date_purchased 

FROM book_projects 

JOIN date_purchased AS paperback ON paperback.book_project_id = book_projects.id 
    AND paperback.type = 'paperback' 

JOIN date_purchased AS hardcover ON hardcover.book_project_id = book_projects.id 
    AND hardcover.type = 'hardcover' 
+0

謝謝。我將其修改爲LEFT JOIN,因此如果未找到相關的平裝書或精裝書,它將返回NULL。 – 2013-03-15 20:08:23

+0

@MikeFunk:不客氣,很高興我能幫忙:-D – 2013-03-15 20:13:09