我想从表A.Prod_Name where status is ACTIVE
中选择,然后从表B WHERE Table B.Status is OPENED
中计数寄存器的总数,如果表B上没有任何内容,Product_Name
计数将为0。
如果表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
如果我理解正确,我认为您要将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
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'