我正在學習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;
我的結果集列出的一切,我正在尋找,除了它的格式如下:
那麼,怎樣才能請問SQL告訴我這些領域的,而更像是:
我認爲這是與使用DISTINCT,但我不能爲我的生活想出如何使它工作。另外,如果MySQL和SQL Server 2012中的解決方案存在差異,那麼這也會非常有用(我們在工作中使用SQL Server 2012)。
感謝@Rahul,我將它引入MySQL,它產生了一個很好的結果集,現在它只顯示每個客戶一行,但它也只顯示他們購買的一個項目。它提出了一個有趣的問題 - 如何選擇顯示哪個項目,如果他們有多個購買? hmm .... –
用'GROUP_CONCAT(purchases.item)'替換'purchases.item'中的選擇部分,看看你得到了什麼 – JamieD77
@ user1221684這是一個很棒的小功能。我將它與Rahul的答案結合起來,它把我所期待的所有purchase.item與同一個customerid合併成一列,並以逗號分隔。走的路,非常感謝你們! –