MySQL选择WHERE和LEFT JOIN与WHERE GROUP RESULT

时间:2014-08-09 02:07:35

标签: php mysql

我想从表格A.Prod_Name where status is ACTIVE中选择,然后计算表格B WHERE Table B.Status is OPENED中的寄存器总数,如果表B中没有任何内容,则Product_Name计数将为0。 / p>

如果要对表B中的寄存器进行计数,因为它应该查找状态为OPENED的寄存器,它会显示产品名称和计数,但如果表B中的产品没有任何内容状态为OPENED,然后它不会选择表A中的Product_Name,而且不会计算任何内容。

WHERE Table B.Status = 'OPENED'条件只影响表B.而不是表A,基本上是2,其中条件,一个在产品选择而另一个在左连接选择,但结果计数将是逐个产品。

SELECT
    tableA.prodID,
    tableA.prodName,
    COUNT(tableB.DetailsID) as numberDetails
FROM
    tableA
    LEFT JOIN tableB
        ON tableA.prodID = tableB.prodID
WHERE
    tableA.status = 'ACTIVE'
    and tableB.status = 'OPENED'
GROUP BY
    tableA.prodID

2 个答案:

答案 0 :(得分:1)

如果我理解正确,我认为你想将OPENED的检查移到JOIN中,这样在tableB中没有状态OPENED的tableA记录仍会显示。

SELECT
    tableA.prodID,
    tableA.prodName,
    COUNT(tableB.DetailsID) as numberDetails
FROM
    tableA
LEFT JOIN tableB
    ON tableA.prodID = tableB.prodID
    AND tableB.status = 'OPENED'
WHERE
    tableA.status = 'ACTIVE'
GROUP BY
tableA.prodID

答案 1 :(得分:0)

SELECT 
    tableA.prodId
    , tableA.prodname
    , cntQry.numberDetails 
FROM tableA 
LEFT JOIN 
 (SELECT 
      tableB.ProdId
      , COUNT(*) as numberDetails
  FROM tableB 
  WHERE tableB.status = 'OPENED'
  GROUP BY tableB.ProdId) cntQry
ON tableA.ProdId = cntQry.ProdId
WHERE tableA.status = 'ACTIVE'