Допустим, у меня есть произвольный запрос MySQL с именем query1
, который выполняется для таблицы table1
и генерирует подмножество строк этой таблицы. С функциональной точки зрения этот запрос просто выдает логическое значение для каждой строки, где, если логическое значение равно true
, строка возвращается в результатах, а если это false
, то нет (или наоборот, w.l.o.g.).
Допустим также, что я беру большой двоичный объект JSON, анализирую его в строку и добавляю строку в table1
каждую минуту. Я хочу проверить и посмотреть, возвращает ли query1
true
или false
строку сразу после ее добавления.
Есть ли способ выполнить этот тест, фактически не добавляя строку где-нибудь в базу данных, а затем проверяя, возвращается ли строка запросом? Моя интуиция такова, что должна быть возможность «эмулировать» запрос к новым данным, фактически никуда не добавляя их, но я не знаю, как это сделать (если это вообще возможно).
Вы можете использовать SQL для оценки выражений, не касаясь какой-либо таблицы.
Пример:
mysql> set @age = 29;
mysql> set @state = 'CA';
mysql> select @age > 30 and @state = 'CA';
+-----------------------------+
| @age > 30 and @state = 'CA' |
+-----------------------------+
| 0 |
+-----------------------------+
Этот пример возвращает 0 (ложь), потому что переменная @age
не больше 30.
Вы, безусловно, можете использовать значения, извлеченные из ваших данных JSON (или любого другого источника), в качестве терминов в выражении SQL, подобном этому.
Не обязательно использовать пользовательские переменные, как показано в моем примере выше. Вы также можете просто использовать буквальные значения. Я только что показал использование переменных, потому что может быть проще проверить условия вашего запроса, если вы используете имена переменных, которые соответствуют именам ваших столбцов.
Вы можете использовать производную таблицу. Например.:
select max(id) from (select 1 id, 'test' name from dual) as t;
В приведенном выше примере 1 и «тест» представляют строку, которую вам нужно будет эмулировать, присутствуя в таблице, а select max(id) from t
представляет запрос1.
Есть ли в MySQL такая же двойная таблица, как в Oracle?
@jarlh да. Это не требуется, если таблицы не являются ссылками. select 1 id, 'test'
тоже сработает.
вы могли бы использовать
EXISTS()