Условное левое соединение или Где SQL-запрос - PullRequest
0 голосов
/ 03 июля 2019

У меня есть запросы, которые отображают некоторые данные, затем я оставляю соединение с одной таблицей, но есть время, в этой таблице нет данных.

Можно ли добавить запрос условного левого соединения или предложение 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. Я пытался любым возможным способом, но я потерпел неудачу.

1 Ответ

1 голос
/ 03 июля 2019

Я собираюсь использовать более простой запрос в качестве примера. В этом запросе:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...