MySQL子查询,从一个表中获取ID列表,以查询第二个表

MySQL子查询,从一个表中获取ID列表,以查询第二个表,mysql,subquery,Mysql,Subquery,我有两个表,一个是产品,另一个是销售记录 我正在使用此查询: SELECT DAY(FROM_UNIXTIME(saleDate)) as day, MONTH(FROM_UNIXTIME(saleDate)) as mnth, YEAR(FROM_UNIXTIME(saleDate)) as yr, COUNT(id) as invCount, SUM(quantity) as qty FROM salesRecords WHERE itemNo I

我有两个表,一个是
产品
,另一个是
销售记录

我正在使用此查询:

SELECT 
    DAY(FROM_UNIXTIME(saleDate)) as day,
    MONTH(FROM_UNIXTIME(saleDate)) as mnth,
    YEAR(FROM_UNIXTIME(saleDate)) as yr,   
    COUNT(id) as invCount, SUM(quantity) as qty 
 FROM salesRecords WHERE itemNo IN 
      (SELECT GROUP_CONCAT(convert(id, CHAR(8))) as ids FROM products WHERE brand =100 GROUP by brand) 
    GROUP BY 
       mnth, yr 
    ORDER BY saleDate
products(产品)表包含我需要了解的关于产品的所有信息,salesRecords(销售记录)包含saleDate(销售日期)、销售数量、折扣等详细信息,因此我在这里试图实现的是一个Unix时间字段“saleDate”(销售日期)中的所有品牌id为
100
的产品的销售列表

它可以工作,但速度很慢

有人能建议一种更快的方法吗


如果我手动将ID列表插入到查询中,它似乎工作得更快,那么我应该运行两个查询吗?

我已经用一个内部联接重写了您的查询。试试看,然后回来看新闻:

SELECT 
    DAY(FROM_UNIXTIME(saleDate)) as day,
    MONTH(FROM_UNIXTIME(saleDate)) as mnth,
    YEAR(FROM_UNIXTIME(saleDate)) as yr,   
    COUNT(id) as invCount, 
    SUM(quantity) as qty 
 FROM salesRecords s inner join 
      products on s.itemNo = p.id 
 WHERE 
      p.brand =100
 GROUP BY 
       `day`, mnth, yr 
 ORDER BY 
       saleDate
此外,为了避免where子句,您可以在
操作中设置限制:

    ...
    SUM(quantity) as qty 
 FROM salesRecords s inner join 
      products on p.brand =100 and s.itemNo = p.id 
 GROUP BY 
    ...

是的,那要快得多。我今天遇到了Wi-Fi问题,但即使使用我的iPhone作为热点通过3G连接运行,数据返回速度也要快得多!:-)我仍然在使用WHERE条款,您关于删除该条款的建议会进一步加快吗?(现在要检查“网络问题”是很棘手的!)