Давайте проиллюстрируем это на примере. Когда мы закончим, присоединитесь к тому, где условие будет фильтровать записи после объединения.
Допустит, у нас есть 2 таблицы
mysql> select * from test1;
+------+------+--------+
| id | val | status |
+------+------+--------+
| 1 | a | 0 |
| 2 | b | 1 |
| 3 | c | 1 |
| 4 | d | 1 |
| 5 | d | 0 |
+------+------+--------+
5 rows in set (0.00 sec)
mysql> select * from test2 ;
+------+------+------+
| id | t1id | val |
+------+------+------+
| 1 | 1 | aaa |
| 2 | 2 | aaa |
| 3 | 3 | aaa |
| 4 | 5 | eeee |
+------+------+------+
4 rows in set (0.00 sec)
Если нам нужно, чтобы получить все данные из test1 и делая left join
к test2, он будет возвращать все данные из test1 и не соответствующей записи из test2, как нуль
select t1.*,
t2.t1id from
test1 t1 left join test2 t2 on t1.id = t2.t1id ;
+------+------+--------+------+
| id | val | status | t1id |
+------+------+--------+------+
| 1 | a | 0 | 1 |
| 2 | b | 1 | 2 |
| 3 | c | 1 | 3 |
| 4 | d | 1 | NULL |
| 5 | d | 0 | 5 |
+------+------+--------+------+
Теперь, если мы добавим, где условие будет фильтровать данные после соединения, как
select t1.*,
t2.t1id
from test1 t1
left join test2 t2 on t1.id = t2.t1id where t1.status = 1;
+------+------+--------+------+
| id | val | status | t1id |
+------+------+--------+------+
| 2 | b | 1 | 2 |
| 3 | c | 1 | 3 |
| 4 | d | 1 | NULL |
+------+------+--------+------+
Или даже
select t1.*,
t2.t1id from test1 t1
left join test2 t2 on t1.id = t2.t1id
where t2.val = 'aaa'
+------+------+--------+------+
| id | val | status | t1id |
+------+------+--------+------+
| 1 | a | 0 | 1 |
| 2 | b | 1 | 2 |
| 3 | c | 1 | 3 |
+------+------+--------+------+
Теперь, если мы хотим, чтобы данные левой таблицы, которые будут отображаться, то нам нужно переместить где состояние в присоединяющемся состояние, в результате, не совпадающие записи будут отображаться как нулевые.
select t1.*,
t2.t1id from test1 t1
left join test2 t2 on t1.id = t2.t1id
and t1.status = 1 and t2.val = 'aaa'
+------+------+--------+------+
| id | val | status | t1id |
+------+------+--------+------+
| 1 | a | 0 | NULL |
| 2 | b | 1 | 2 |
| 3 | c | 1 | 3 |
| 4 | d | 1 | NULL |
| 5 | d | 0 | NULL |
+------+------+--------+------+
Так что в вашем случае вы должны переместить где условие в присоединяющемся условие, если вы хотите, чтобы все записи из левой таблицы, чтобы быть там в результате.
изменить 'paybacks.success = true' на' paybacks.success = true или окупаемость.успех равен нулю –
нет Это не работает и дает мне результаты больше, чем ожидалось –