Php 将第二个表联接到第一个表时的不正确和

Php 将第二个表联接到第一个表时的不正确和,php,mysql,sql,database,Php,Mysql,Sql,Database,我有两张桌子: 订单id、站点、订单日期、运输费用、amazone费用、总额、损益、处理费用 orderItemDetails id、orderId、产品名称、产品费用 我写这个查询是为了获取数据,但是我没有得到我想要的数据。因此,请更正我的查询,以便我获得上图中的数据 SELECT o.totalshippingfees, o.totalamazonefees, o.totalorderamount, o.totalprofitloss, o.tota

我有两张桌子:

订单id、站点、订单日期、运输费用、amazone费用、总额、损益、处理费用 orderItemDetails id、orderId、产品名称、产品费用 我写这个查询是为了获取数据,但是我没有得到我想要的数据。因此,请更正我的查询,以便我获得上图中的数据

SELECT 
    o.totalshippingfees,
    o.totalamazonefees,
    o.totalorderamount,
    o.totalprofitloss,
    o.totalprocessing_fees,
    oi.totalproductexpense,
    o.site
FROM (
    SELECT 
        orderdate,
        site,
        sum(orders.shipping_fees) as totalshippingfees,
        sum(orders.amazone_fees) as totalamazonefees,
        sum(orders.totalAmount) as totalorderamount,
        sum(orders.profit_loss) as totalprofitloss,
        sum(orders.processing_fees) as totalprocessing_fees
    FROM orders
    group by site
) as o
JOIN (
    SELECT 
        site,
        sum(orderItemDetails.product_expense) as totalproductexpense,
        sum(orders.shipping_fees) as totalshippingfees,
        sum(orders.amazone_fees) as totalamazonefees,
        sum(orders.totalAmount) as totalorderamount,
        sum(orders.profit_loss) as totalprofitloss,
        sum(orders.processing_fees) as totalprocessing_fees
    from orders 
    LEFT JOIN orderItemDetails ON orders.id = orderItemDetails.orderId 
    group by site
) as oi
WHERE MONTH(o.orderdate) = '".$monthNo."' AND YEAR(o.orderdate)= '".$monthyear[1]."'

如果我理解正确,您可以在orders上使用简单的逐站点分组,在orderItemDetails上使用逐站点分组,并在站点上加入他们

DB小提琴:

更新:

您可以为日期筛选添加where条件,如下所示:

select *
from (
    select 
      sum(shipping_fees) as totalshippingfees,
      sum(amazone_fees) as totalamazonefees,
      sum(totalAmount) as totalorderamount,
      sum(profit_loss) as totalprofitloss,
      sum(processing_fees) as totalprocessing_fees,
      site
    from orders 
    where MONTH(orderdate) = 10 AND YEAR(orderdate) = 2019
    group by site
 ) d1
 join (
        select
            sum(product_expense) as totalproductexpense,
            site
        from orders o
        left join orderItemDetails od
        on o.id = od.orderId 
        where MONTH(o.orderdate) = 10 AND YEAR(o.orderdate) = 2019
        group by o.site
      ) d2
    on d1.site = d2.site

DB Fiddle:

您的连接条件在哪里?您可以共享链接吗?@vivek_23 DB Fiddle link:@BhoomiPatel您必须创建表并在左列插入行,在右列插入实际查询,然后保存和共享链接。我这样问是因为我们可以测试并给出正确的答案。@vivek_23看我更新了db fiddle:@BhoomiPatel Yours有更多的行。我肯定我错过了什么。这个查询没有给我我想要的东西。这个查询没有给我totalshippingfees、totalamazonefees、totalorderamount、totalprofitloss、totalprocessing\u fees的正确值。只有totalproductexpense值是正确的。@BhoomiPatel结果也是按订单id或orderitemdetails id分组的?结果按站点分组。
select *
from (
    select 
      sum(shipping_fees) as totalshippingfees,
      sum(amazone_fees) as totalamazonefees,
      sum(totalAmount) as totalorderamount,
      sum(profit_loss) as totalprofitloss,
      sum(processing_fees) as totalprocessing_fees,
      site
    from orders 
    where MONTH(orderdate) = 10 AND YEAR(orderdate) = 2019
    group by site
 ) d1
 join (
        select
            sum(product_expense) as totalproductexpense,
            site
        from orders o
        left join orderItemDetails od
        on o.id = od.orderId 
        where MONTH(o.orderdate) = 10 AND YEAR(o.orderdate) = 2019
        group by o.site
      ) d2
    on d1.site = d2.site