Попытка получить значение из 5 разных таблиц на основе другого значения - PullRequest
1 голос
/ 07 октября 2019

Я пытаюсь получить значение date из 5 различных таблиц на основе значения usertype и отобразить его на DATATABLES table.

Например, : - еслиusertype значение равно 2, чем я хочу получить date значение из таблицы table_two.

Вот что я получил до сих пор:

SELECT 
CASE 
WHEN tm.usertype = 1 THEN type_1.date 
WHEN tm.usertype = 2 THEN type_2.date 
WHEN tm.usertype = 3 THEN type_3.date 
WHEN tm.usertype = 4 THEN type_4.date 
WHEN tm.usertype = 5 THEN type_5.date 
END, 
tm.id,
tm.usertype
FROM table_main tm 
LEFT JOIN table_one type_1 ON tm.id=type_1.uid 
LEFT JOIN table_two type_2 ON tm.id=type_2.uid 
LEFT JOIN table_three type_3 ON tm.id=type_3.uid 
LEFT JOIN table_four type_4 ON tm.id=type_4.uid 
LEFT JOIN table_five type_5 ON tm.id=type_5.uid 

Ошибка I 'Получение данных из DATATABLES: -

Предупреждение DataTables: идентификатор таблицы = пример - Произошла ошибка SQL: SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец «дата» в «списке полей»

1 Ответ

0 голосов
/ 07 октября 2019

Ваш вопрос явно вызван тем, что столбец не имеет ожидаемого имени. Однако ваш запрос может все еще не возвращать то, что вы хотите, потому что значения идентификаторов могут (по крайней мере, теоретически) быть общими для таблиц.

Лучше переместить условную логику в on предложение:

SELECT COALESCE(type_1.date, type_2.date, type_3.date, type_4.date, type_5.date) 
       tm.id, tm.usertype
FROM table_main tm LEFT JOIN
     table_one type_1
     ON tm.id = type_1.uid AND tm.usertype = 1 LEFT JOIN
     table_two type_2
     ON tm.id = type_2.uid AND tm.usertype = 2 LEFT JOIN
     table_three type_3
     ON tm.id = type_3.uid AND tm.usertype = 3 LEFT JOIN
     table_four type_4
     ON tm.id = type_4.uid AND tm.usertype = 4 LEFT JOIN
     table_five type_5
     ON tm.id = type_5.uid AND tm.usertype = 5 ;

Это не исправит вашу конкретную ошибку. Для этого вам нужно исправить имена столбцов.

...