это сводит меня с ума!Coalesce потянув ноль как значение
У меня есть три стола. Первая таблица содержит список всех записей вместе с другими данными (регион, даты и т. Д.). Вторая и третья таблицы содержат все данные о часах/затратах, но вторая таблица содержит только исторические записи, а третья таблица содержит более новые записи. Я хочу, чтобы мой coalece попытался сначала найти значение в новых записях, но если запись не найдена, посмотрите в историческую таблицу. По какой-то причине, даже если я знаю, что это значение в исторической таблице, результат моего COALESCE приходит как 0.
Table1
ID Region
1 US
2 US
3 Europe
4 US
5 Europe
6 US
Table2
ID Hours
1 10
2 15
3 20
Table3
ID Hours
4 3
5 7
6 4
Итак, мое заявление написано, как это:
SELECT t1.ID, COALESCE(t3.hours, t2.hours) AS HOURS FROM table1 t1 LEFT JOIN table2 t2 ON t1.ID=t2.ID LEFT JOIN table3 t3 ON t1.ID=t3.ID
Теперь, по какой-либо причине, если значение найдено в t3 (более новые записи), оно вытягивает правильное значение, но если оно не находит значения и должно вытягивать значение из t2, оно вытягивается вместо 0 вместо фактического значения. Результат выглядит следующим образом:
ID HOURS
1 0
2 0
3 0
4 3
5 7
6 4
Я думаю, что это что-то делать с типом столбца в таблице 2 (у меня есть все настройки столбцов как VARCHAR (55), но я не могу найти какие-либо правила вокруг данных . типы в функции Coalesce о необходимости использовать только определенный тип столбца с COALESCE
Цените никаких указаний
отредактирован, чтобы добавить результаты для запроса Спенсера:
ID t2.hours + 0 t2.hours hex(t2.hours) length(t2.hours)
413190 240 240 F0 3
не должен 'on' для последнего соединения таблицы быть' t1.id = t3.id'? или это просто опечатка? – xQbert
Ваш запрос выглядит хорошо. Вот [скрипт SQL] (http://sqlfiddle.com/#!3/e3f43/5/0), показывающий, что он работает. Я думаю, что у вас есть проблема с данными где-то, что обфускается вашим вопросом. – xQbert
Вы говорите, что столбец 'hours' в' t2' - VARCHAR (55). Значения выражений выглядят правильно, '240 'в качестве символьной строки, имеет длину 3 байта и вычисляет числовое значение' 240'. Выход из HEX странный. Если этот столбец является символом latin1, обязательно ожидайте возвращения '323430'. Возврат 'F0' очень странный. Интерпретируется как целое значение (TINYINT), которое равно десятичной (15 * 16) + (0 * 1) = '240'. Очень странно. Что такое символ столбца 'hours'? Какая версия MySQL?(выводятся из 'SHOW CREATE TABLE table2' и выводятся из' SHOW VARIABLES LIKE 'version%' ' – spencer7593