Mysql 仅当先购买了另一种产品时才能获得该产品?
我在看,它让我想知道,当鼠标先于键盘购买时,您将如何从客户表中选择一个名称 我试过这样的方法,但没有成功Mysql 仅当先购买了另一种产品时才能获得该产品?,mysql,sql,Mysql,Sql,我在看,它让我想知道,当鼠标先于键盘购买时,您将如何从客户表中选择一个名称 我试过这样的方法,但没有成功 SELECT product_name, customer.name, date_of_sale FROM sales, product, customer WHERE STR_TO_DATE( ( SELECT date_of_sale FROM sal
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')
我可以想出两种方法 方法一是使用
一元联接
(销售
到销售
,然后到客户
)
方法二是在视图
(或临时表
)中加入客户的组
SQLFiddle:
一元连接
我把所有的专栏都包括进来是为了提供信息
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方法支持like中一行中的多个值,例如
like“%3,2,10%”
- 缺点:对于较小的产品表,速度较慢,并且使用内存中的临时表
加入:
- 优点:对于较小的数据量,速度更快
- CON:订单中+1个产品的联接中需要+1个销售表李>
- 缺点:对于较大的数据量,速度可能较慢
截止日期('2012….:00')
毫无意义。mysql将接受任何看起来像yyyy-mm-dd hh:mm:ss
的字符串作为有效的日期时间值。如果您的date\u of\u sale
值已经是datetime值,那么它就更没有意义了。将日期转换为日期是多余的。很高兴知道,+1感谢您通知我,我认为我们需要销售、产品和客户描述表来真正帮助您。它将是多个连接-客户和销售(假设有一个col要连接)和产品销售(如果有公共col,同样如此)。祝你好运您打算说customer.name=xxxxxxx或@may建议的组在哪里?在WHERE
中,第一个子句是非布尔的。这是如何运行的?最好用简单的英语解释您想要获得的数据。我们可以在链接中看到这些表。@ehime还将根据您的方法添加另一个可能更快的解决方案。
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;