首页 > 解决方案 > 条件左连接或 Where 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_drreturnsummary成为可选/有条件的以及WHERE ... AND drr.trandate. 我尝试了任何可能的方法,但我失败了。

标签: mysqlsql

解决方案


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

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

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

我想你想要一个“预加入过滤器”。你可以这样做:

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

推荐阅读