使用多重内部连接在 MySQL 中塑造数据集

Shaping dataset in MySQL with a multiple inner join

我正在学习 MySQL 并使用我根据在线示例设置的一些虚拟表。

没有给出创建表格的代码,只是给出了它们应该是什么样子的最终结果,所以我尽力重新创建它们。 我知道他们的设计并不理想 - 我宁愿对 customer_info.state 列使用类似 ENUM 的东西,对日期使用某种带有 getdate() 的 DATETIME,例如,但在那些(更合适的设置)方面还没有取得成功,所以我首先在 JOINS 上工作,因为它们与我的工作相关。 稍后我会进行设计微调(我的工作将涉及大量查询和连接,而不是很多数据库设计,尽管我最终想学得更好habits/skills 在那个舞台上)。

我目前正在练习我的 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工作)。

如果您将 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;

在示例中,为什么 Lantern 有关联的客户数据,而其他的没有?如果这正是您想要的,那么我们需要更多关于如何选择的信息,然后我可以用答案更新它。