Набор результатов MYSQL отличается при добавлении конкатенации - PullRequest
0 голосов
/ 31 мая 2019

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

Я хочу понять, почему я получаю меньше строк при объединении. Я ожидаю, что оба набора результатов будут иметь одинаковое количество строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...