条件左联接或SQL查询

时间:2019-07-03 03:51:11

标签: mysql sql

我有显示一些数据的查询,然后我离开了一个表,但是有一段时间,那个表没有数据。

是否有可能添加条件左连接或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_drreturnsummaryWHERE ... AND drr.trandate是可选的/有条件的。我尝试了所有可能的方法,但是失败了。

1 个答案:

答案 0 :(得分:1)

我将使用一个更简单的查询作为示例。在此查询中:

collapsed

WHERE子句排除任何不匹配的TableA记录,因为在这种情况下,所有TableB值都将为NULL。您可以将其视为“后加入过滤器”。

我认为您需要一个“预加入过滤器”。您可以这样操作:

select *
from TableA left outer join TableB on TableA.Field1 = TableB.Field1
where TableB.Field2 = 'somevalue'