Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / select внутри if / 5 сообщений из 5, страница 1 из 1
26.02.2017, 20:23
    #39410460
Reaper666
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select внутри if
Есть таблица. В ней два столбца, name и virtual.
Так вот, если значение virtual=0, то надо сделать join с одной таблицей и выбрать оттуда имя, а если virtual=1, то сделать join с другой таблицей и выбрать имя оттуда.
Если сделать вот так, то не работает.
Код: sql
1.
2.
3.
4.
select sl_servers.name
if (sl_servers.virtual=1,select sl_racks.rack FROM sl_servers INNER JOIN sl_racks on sl_servers.place=sl_racks.id ,NULL)
if (sl_servers.virtual=0,select sl_hv.name as place from sl_servers INNER JOIN sl_hv on sl_servers.place=sl_hv.id ,NULL)
from sl_servers



MySQL просто сообщает, что ему конструкция непонятна. Если же запрос убрать, а оставить просто подстановку значений, то само собой все работает.

Пробовал вот так.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
BEGIN
if (sl_servers.virtual=0) 
then
select sl_racks.rack FROM sl_servers INNER JOIN sl_racks on sl_servers.place=sl_racks.id;
else
select sl_hv.name as place from sl_servers INNER JOIN sl_hv on sl_servers.place=sl_hv.id;
end if;
end; 



То же самое, опять ругается на конструкцию.
Что я делаю не так и как исправить?
...
Рейтинг: 0 / 0
26.02.2017, 20:32
    #39410463
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select внутри if
Надо "сделать JOIN" с обеими таблицами, причём LEFT, а в условиях соединения указать, кроме остальных, также и условие на значение поля virtual.
...
Рейтинг: 0 / 0
26.02.2017, 23:44
    #39410517
Reaper666
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select внутри if
Akina,

хм, и точно, помогло. Вот только такой вопрос возник. Результат сейчас вот в таком виде

Код: sql
1.
2.
3.
4.
5.
6.
+------------------+------------+------------------+
| name             | rack       | hv               |
+------------------+------------+------------------+
| 1st14            | NULL       | esx72            |
| esx72            | RACK-5     | NULL             |
+------------------+------------+------------------+



а можно как-то сделать так, чтобы значения rack и hv были в одном столбце?
...
Рейтинг: 0 / 0
27.02.2017, 06:48
    #39410558
paver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select внутри if
Reaper666Akina,
а можно как-то сделать так, чтобы значения rack и hv были в одном столбце?
COALESCE(rack, hv)
...
Рейтинг: 0 / 0
27.02.2017, 10:26
    #39410663
Reaper666
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select внутри if
paver,

Благодарю, работает как надо.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / select внутри if / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]