mysql - 仅在先购买另一种产品后才获取该产品?

标签 mysql sql

我正在查看this example of joining multiple tables这让我想知道,例如,在购买鼠标之前购买键盘时,您将如何从客户表中选择名称?

我正在尝试类似的方法,但没有成功。

SELECT 
    product_name, customer.name, date_of_sale 
    FROM sales, product, customer 
    WHERE 
        STR_TO_DATE(
            (
                SELECT date_of_sale 
                FROM sales 
                WHERE product_id = 2
            ),
        STR_TO_DATE('2012-12-23 18:00:00') 

        > 

        STR_TO_DATE(
            (
                SELECT date_of_sale 
                FROM sales 
                WHERE product_id = 3
            ),
        STR_TO_DATE('2012-12-23 18:00:00') 

最佳答案

我可以想到两种方法来做到这一点。

方法一是使用一元连接(SalesSales,然后到 Customers)。

方法二是在 View (或临时表)中group_concat加入到客户

SQLFiddle:http://sqlfiddle.com/#!2/9a031/22

一元连接

出于提供信息的原因,我包含了所有列。

SELECT c.name,
       s1.product_id AS product1,
       s1.date_of_sale AS date1,
       s2.product_id AS product2,
       s2.date_of_sale AS date2
FROM sales s1,
     sales s2,
     customers c
WHERE s1.date_of_sale < s2.date_of_sale
  AND s1.customer_id = s2.customer_id AND
  c.customer_id = s1.customer_id and
  s1.product_id = 3 AND  s2.product_id = 2;

临时表中的Group_concat

SELECT name
FROM customers,
  (SELECT customer_id,
          group_concat(PRODUCT_ID
                       ORDER BY date_of_sale)
   FROM sales
   GROUP BY customer_id HAVING group_concat(PRODUCT_ID
                                            ORDER BY date_of_sale) LIKE '%3,2%') sales_order
WHERE customers.customer_id = sales_order.customer_id;

优点/缺点

分组连接:

  • PRO:group_concat 方法支持类似的行中的多个值,例如喜欢“%3,2,10%”
  • 缺点:对于较小的产品表,速度较慢并且使用临时内存表。

加入:

  • PRO:数据量较小时速度更快。
  • CON:需要在联接中为 +1 个产品添加 +1 个销售表。
  • 缺点:数据量越大,速度可能会越慢

关于mysql - 仅在先购买另一种产品后才获取该产品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24639106/

相关文章:

mysql - Windows 8.1下如何查看Mysql的查询日志

mysql - 在 Mac OS 中更改 XAMPP MySQL 端口

mysql - 在具有预定义值的两个日期属性之间进行选择

sql - 分析函数可以引用窗口中的多行吗?

sql - 将表结构复制到sqlite3中的新表

mysql - 多对多与一对多

sql - 将统计数据整理成时间 block

mysql - 我想在此 mysql 语句中使用哪个逻辑运算符?

php - 从 MySQL 表中获取数据并插入到另一个表中

mysql - 如何在 MySQL 查询计数中引入完整的 24 个月跨度(包括 NULL 值)