我有显示一些数据的查询,然后我离开了一个表,但是有一段时间,那个表没有数据。
是否有可能添加条件左连接或where子句的查询?
$sql = "SELECT
mm.idno as idno,
TRIM(UPPER(CONCAT(mm.fname, ' ', mm.mname, ' ', mm.lname))) as fullname,
TRIM(UPPER(mm.branchname)) as branchname,
TRIM(UPPER(mm.address)) as outlet_address,
(SUM(dr.totalamt)/GREATEST(1,COUNT(DISTINCT drr.id)) - SUM(drr.totalamt)/GREATEST(1,COUNT(DISTINCT dr.id))) as total_amount
FROM 8_membermain mm
LEFT JOIN 8_directsalessummary dr
ON mm.idno = dr.idno
LEFT JOIN 8_drreturnsummary drr
ON mm.idno = drr.idno
WHERE mm.status > 0 AND dr.status = 1
AND dr.ispaid = 'Full Payment'
AND dr.trandate BETWEEN '".$date1."' AND '".$date2."'
AND drr.trandate BETWEEN '".$date1."' AND '".$date2."'";
有时8_drreturnsummary
中没有数据,但是我添加了AND drr.trandate BETWEEN '".$date1."' AND '".$date2."'"
,所以查询中有错误。我只希望8_drreturnsummary
和WHERE ... AND drr.trandate
是可选的/有条件的。我尝试了所有可能的方法,但是失败了。
答案 0 :(得分:1)
我将使用一个更简单的查询作为示例。在此查询中:
collapsed
WHERE子句排除任何不匹配的TableA记录,因为在这种情况下,所有TableB值都将为NULL。您可以将其视为“后加入过滤器”。
我认为您需要一个“预加入过滤器”。您可以这样操作:
select *
from TableA left outer join TableB on TableA.Field1 = TableB.Field1
where TableB.Field2 = 'somevalue'