Я пытаюсь найти логический ответ на проблему с двумя разными наборами результатов в MYSQL.
Когда я объединяю списки полей таблицы 3 в один столбец, я получаю различное количество результатов.
Не знаю, имеет ли это значение, но таблицы 1 и 2 - это одна и та же таблица, просто осталось объединить ее с таблицей 3 в разных полях.
Ниже приведена сокращенная версия моего исходного запроса (результаты 1950 года):
SELECT DISTINCT
table1.invoice_num,
table2.invoice_num,
'ADMIN' as user_name,
...
...
table3.invoice_type,
table3.invoice_amount,
table3.timestamp,
table3.some_other_value_1,
table3.some_other_value_2,
table3.some_other_value_3,
table3.some_other_value_4
FROM table3
LEFT JOIN table1
ON table1.value = table3.different_value
AND
...
...
LEFT JOIN table2
ON table1.value = table2.different_value
AND
;
Запрос после применения конкатенации (результаты 1910 г.):
SELECT DISTINCT
table1.invoice_num,
table2.invoice_num,
'ADMIN' as user_name,
...
...
CONCAT(
'Some text here ', IFNULL(table3.invoice_type, ''),
'Some more text ', IFNULL(table3.invoice_amount, ''),
'Text Text Text ', IFNULL(table3.timestamp,''),
'Other value 1: ', IFNULL(table3.some_other_value_1,''),
'Other value 2: ', IFNULL(table3.some_other_value_2,''),
'Other value 3: ', IFNULL(table3.some_other_value_3,''),
'Other value 4: ', IFNULL(table3.some_other_value_4,'')
)
FROM table3
LEFT JOIN table1
ON table1.value = table3.different_value
AND
...
...
LEFT JOIN table2
ON table1.value = table2.different_value
AND
;
Я знаю, что функция IFNULL не вызывает проблемы, потому что, если я сделаю следующее, я получу то же число результатов, что и первый запрос:
IFNULL(table3.invoice_type,''),
IFNULL(table3.invoice_amount,''),
IFNULL(table3.timestamp,''),
IFNULL(table3.some_other_value_1,''),
IFNULL(table3.some_other_value_2,''),
IFNULL(table3.some_other_value_3,''),
IFNULL(table3.some_other_value_4,'')
Я хочу понять, почему я получаю меньше строк при объединении. Я ожидаю, что оба набора результатов будут иметь одинаковое количество строк.