Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
К примеру, есть запрос: SELECT `field` FROM `table`LIMIT 1
Если данные есть, возвращется значение `field`, если данных нет, надо чтобы запрос вернул допустим 'ololo'.
Запрос вида SELECT IF(`field`, `field`, 'ololo') FROM `table` не дал нужного результата, `field`IS NOT NULL также не спас ситуацию.
Понимаю, что можно сделать подзапрос, джоин на саму себя и т.п., но интересует можно ли провернуть такой фокус простым запросом?
Неактивен
Neval написал:
К примеру, есть запрос: SELECT `field` FROM `table`LIMIT 1
Если данные есть, возвращется значение `field`, если данных нет, надо чтобы запрос вернул допустим 'ololo'.
Запрос вида SELECT IF(`field`, `field`, 'ololo') FROM `table` не дал нужного результата, `field`IS NOT NULL также не спас ситуацию.
Понимаю, что можно сделать подзапрос, джоин на саму себя и т.п., но интересует можно ли провернуть такой фокус простым запросом?
Одним запросов без подзапросов, думаю, что точно нет.
И смысла в этом тоже нет. Легче проверить запрос пустой или нет уже программно.
Неактивен
Программно не получится, ибо там чёрный ящик без доступа к коду, по сему надо вернуть из БД.
Неактивен
Хм, что-то у меня и подзапрос с джоинами организовать не удалось)) Ану подсобите, уважаемые знатоки))
Неактивен
Извращенные варианты возможны:
Неактивен
Пример выше работает только для LIMIT 1. Если его нет, то лучше всего INFORMATION_SCHEMA.TABLES заменить на заранее приготовленную таблицу с 1 нужной записью.
Неактивен
А для чего нужна INFORMATION_SCHEMA.TABLES или другая таблица? Можно ведь
Неактивен
vasya, согласен, для LIMIT 1 твое решение лучше
Неактивен
То, что нужно, огромное спасибо
Неактивен
Может лучше поправить таблицу
Отредактированно IDX (29.10.2013 19:14:16)
Неактивен
IDX написал:
Может лучше поправить таблицу
id varchar(255) DEFAULT 'ololo'
Вы не правы
Неактивен
vasya написал:
IDX написал:
Может лучше поправить таблицу
id varchar(255) DEFAULT 'ololo'Вы не правы
MariaDB [test]> create table test (id varchar(255) DEFAULT 'ololo');
Query OK, 0 rows affected (0.23 sec)
MariaDB [test]> select id from test;
Empty set (0.00 sec)
MariaDB [test]> select id from test UNION (select 'ololo') LIMIT 1;
+-------+
| id |
+-------+
| ololo |
+-------+
1 row in set (0.08 sec)
почему?
Если заносятся данные, но по каким либо причинам в один из столбцов данные не заносились ни кодом ни тригерами, то при последующей выборке данных, будет вылетать ошибка, ну а если как писали выше, инстркция с UNION отрабатывает только при лимите, то это уже амба.
Я сталкивался с проблемой когда конект сталкивался с пустышками, тем самым ни есть гуд. Вот и взял за основу дефолты писать.
Неактивен
IDX написал:
почему?
Ну вот вам пример приведен с дефолтным значением как вы и хотели и чем оно помогло?
IDX написал:
Если заносятся данные, но по каким либо причинам в один из столбцов данные не заносились ни кодом ни тригерами,
то в этом столбце данные будут, случае отсутствия дефолта там будет null (а по условию задачи данных нет, это совсем другая история)
IDX написал:
то при последующей выборке данных, будет вылетать ошибка,
Я сталкивался с проблемой когда конект сталкивался с пустышками, тем самым ни есть гуд. Вот и взял за основу дефолты писать.
А если там по логике приложения нужен null?
Неактивен
vasya написал:
IDX написал:
то при последующей выборке данных, будет вылетать ошибка,
Я сталкивался с проблемой когда конект сталкивался с пустышками, тем самым ни есть гуд. Вот и взял за основу дефолты писать.А если там по логике приложения нужен null?
что мешает произвести замену в одной функции??? чем в последствии в коде свыше 1 функции?
простая замена.
тут двоякое мнение. кому как удобно.
P.S. Был у меня человек, не ставил дефолты. кода много. править не реально. вот и пришлось глобально изменить то на что будет меняться. просто в дефолте ставили на int(11) 99999999999
Отредактированно IDX (31.10.2013 13:43:54)
Неактивен
просто реплейсили эти девятки в ноль
Неактивен
ах да, а если идёт выборка >100500 строк, а на юнионе лимит в 1 как предлагали выше?
это типа как бэ каждый раз селеккты писать для обращение с лимитированием в 1 строку???
Неактивен
Что-то я теряю нить рассуждений. Каким образом default может помочь в решении задачи ТС?
Неактивен
Люди добрые помогите, я в этом вообще не шарю, но путем догадок попытаюсь задать вопрос! В microsoft word стоит команда {SQLSelect ValueUser From Cam16 (NoLock) where Cam16.D270=888 and Cam16.r_id=1576870}. Когда есть такая строка в таблице и есть данные в таблице то вместо команды подставляется число из базы данных. Но что сюда добавить на тот случай если строки 1576870 в колонке r_id в таблице Cam16 нет вообще. Мicrosoft word выдает в таком случае надпись "ОШИБКА!!!ОШИБКА!!!ОШИБКА!!!", а мне нужно что бы подставился 0.
Неактивен
в MySQL (которому посвящен этот форум) можно
select ValueUser from
((Select ValueUser, 1 From ..)
union all
(select 0, 2)
order by 2 limit 1) t;
Неактивен
vasya написал:
в MySQL (которому посвящен этот форум) можно
select ValueUser from
((Select ValueUser, 1 From ..)
union all
(select 0, 2)
order by 2 limit 1) t;
Куда это влепить в моём случае, если можно по подробнее, а то From .. мне вообще не понятно ? База данных у меня на MySQL.
Отредактированно jon48 (28.11.2016 18:44:22)
Неактивен
заменить один запрос на другой
Неактивен
vasya написал:
заменить один запрос на другой
Извиняюсь за тупость, я поставил {SQLSelect ValueUser From ((Select ValueUser, 1 From Cam16 (NoLock) where Cam16.D270=888 and Cam16.r_id=1576870) union all (select 0, 2) order by 2 limit 1) t} в результате ОШИБКА!!! Что не так? Помогите.
Неактивен
В MySQL нет такого синтаксиса как (NoLock).
Запрос
Неактивен
Страниц: 1