我有一个问题,我试图从数据库中检索具有以下信息的用户数据:
我需要的是购买了参考号为1800和1898的产品的客户的名字,姓氏和电子邮件。 在2018-05-18之前。
我已经尝试过以下查询:
",".join(x)
但是这只返回了 ALL 个客户的所有信息,这不是我想要的。
答案 0 :(得分:0)
假设所有值均来自第一个表ps_customer,则必须仅使用第一个值来指定所有值与table.column一起使用的表。
为更好的可读性,您应该为表赋予别名AS,如下所示。
您还必须在ON语句中指定列要连接到的属性。两个表的值必须相同。
select cus.firstname, cus.lastname , cus.email
from ps_customer AS cus
inner join ps_product AS prod
ON cus.uniqueKey = prod.uniqueKey
where prod.reference in (1800,1898) and prod.date_add >= 2018-05-18;
编辑: 加上图片,我假设您有一个销售表,该销售表涉及客户和产品。我相信构造此查询的最佳方法是:
SELECT customer.firstname, customer.lastname, customer.email
FROM ps_product_sale AS sale (if this is the table with sales records)
INNER JOIN ps_product AS product
ON sale.id_product = product.id_product
INNER JOIN ps_customer AS customer
ON customer.id_customer = sale.id_customer
WHERE product.reference in (1800,1898)
AND product.date_add >= 2018-05-18;
答案 1 :(得分:0)
我宁愿使用两个表共有的唯一键将ps_product表连接到ps_customer表(无论是客户ID还是产品ID,取决于您在两个表中都可用的列),并且然后将我的限制放在单独的where子句中。还要将日期放在单引号中的where子句中:
例如
select ps_customer.firstname, lastname , email
from ps_customer c
inner join ps_product p on c.customerid = p.customerid
where ps_product.reference in (1800,1898) and ps_product.date_add >= '2018-05-18';