2015-06-18 15 views
0

我正在學習MySQL,並使用一些從在線示例中設置的虛擬表進行操作。使用多內部連接在MySQL中整理數據集

沒有給出創建表的代碼,只是他們應該看起來像最終結果,所以我盡我所能重新創建它們。 我知道他們的設計並不理想 - 我寧願在customer_info.state列中使用類似ENUM的東西,以及某些類型的使用日期爲getdate()的DATETIME(例如),但還沒有成功那些(更合適的設置),所以我正在加入JOINS,因爲它們與我的工作有關。 我將在稍後的設計中進行微調(我的工作將涉及很多查詢和加入,而不是很多數據庫設計,儘管我最終希望在該領域學習更好的習慣/技能)。

我目前正在練習我的INNER JOIN,併成功地加入了三張表格,但結果集沒有按照我想要的方式成形。

目前,我的三個表是:

customer_info (customerid INT NOT NULL, firstname VARCHAR(20) NOT NULL, lastname VARCHAR(20) NOT NULL, city VARCHAR(25), state VARCHAR(2)) 

purchases (customerid INT NOT NULL, order_month_day VARCHAR(10), order_year INT NOT NULL, item VARCHAR(50) NOT NULL, quantity INT NOT NULL, price FLOAT NOT NULL) 

customer_favorite_colors (customerid INT NOT NULL, favorite_color VARCHAR(20) NOT NULL) 

我把這個查詢一起加入三個表並顯示一些特定的列:

SELECT customer_info.customerid, customer_info.firstname, customer_info.lastname, customer_info.city, customer_info.state, purchases.item, customer_favorite_colors.favorite_color 

FROM customer_info 

INNER JOIN purchases ON customer_info.customerid = purchases.customerid 

INNER JOIN customer_favorite_colors ON purchases.customerid = customer_favorite_colors.customerid 

ORDER BY customer_info.customerid; 

我的結果集列出的一切,我正在尋找,除了它的格式如下:

These are the results I am getting:

那麼,怎樣才能請問SQL告訴我這些領域的,而更像是:

These are the results I would like to achieve:

我認爲這是與使用DISTINCT,但我不能爲我的生活想出如何使它工作。另外,如果MySQL和SQL Server 2012中的解決方案存在差異,那麼這也會非常有用(我們在工作中使用SQL Server 2012)。

回答

2

如果添加了一個GROUP BY到現有的查詢關鍵詞,比如

SELECT customer_info.customerid, customer_info.firstname, 
    customer_info.lastname, customer_info.city, customer_info.state, 
    GROUP_CONCAT(purchases.item), customer_favorite_colors.favorite_color 
    FROM customer_info 
    INNER JOIN purchases ON customer_info.customerid = purchases.customerid 
    INNER JOIN customer_favorite_colors 
    ON purchases.customerid = customer_favorite_colors.customerid 
    GROUP BY customer_info.customerid, customer_info.firstname, 
    customer_info.lastname, customer_info.city, 
    customer_info.state, customer_favorite_colors.favorite_color 
    ORDER BY customer_info.customerid; 
+0

感謝@Rahul,我將它引入MySQL,它產生了一個很好的結果集,現在它只顯示每個客戶一行,但它也只顯示他們購買的一個項目。它提出了一個有趣的問題 - 如何選擇顯示哪個項目,如果他們有多個購買? hmm .... –

+2

用'GROUP_CONCAT(purchases.item)'替換'purchases.item'中的選擇部分,看看你得到了什麼 – JamieD77

+0

@ user1221684這是一個很棒的小功能。我將它與Rahul的答案結合起來,它把我所期待的所有purchase.item與同一個customerid合併成一列,並以逗號分隔。走的路,非常感謝你們! –

1

在這個例子中,爲什麼元宵有關聯的客戶數據而不是其他什麼?如果這正是你想要的,那麼我們需要更多關於如何選擇的信息,然後我可以用答案來更新它。

+1

PD它是新客戶的第一行是所有(視覺分離) – Drew

+0

那麼它的隨意性呢?確定更新我的答案。 –

+1

Nvm我看到它被解決了,祝你好運! –