|
v7: SQLite: можно ли написать подобный запрос без использования временной таблицы? | ☑ | ||
---|---|---|---|---|
0
Uberschall
08.05.21
✎
17:33
|
CREATE TEMPORARY TABLE newValues(id STRING(36) PRIMARY KEY);
INSERT INTO newValues(id ) VALUES (:ids); SELECT tmp.id FROM newValues tmp LEFT JOIN OrderEntity ON tmp.id = OrderEntity.id WHERE OrderEntity.id IS NULL; DROP TEMPORARY TABLE tmp_newValues; есть массив данных- нужно найти значения из массива, для которых отсутствуют данные в БД (связь по id) |
|||
1
acanta
08.05.21
✎
18:58
|
Теперь все так пишут?
|
|||
2
acanta
08.05.21
✎
19:06
|
Мы добрались до вопроса что такое sqlite
https://m.habr.com/ru/post/149356/ |
|||
3
Salimbek
08.05.21
✎
19:19
|
К автору из (0) вопросы:
1) А для чего нужно именно без временной таблицы? 2) В этом запросе где-то есть 1С-ные таблицы? Или это все "самописка"? 3) Пробовали ли вы метод УложитьТЗ? (Кстати вопрос, ваши данные именно в Массиве? Или вы под этим понимаете СписокЗначений или ТЗ?) 4) Разумеется можно и без временной таблицы, через select id from (select 'v1' as id union all select 'v2' union all ...) as vt Но это гораздо хуже читается |
|||
4
Uberschall
08.05.21
✎
19:42
|
(3)
1) это связано с фреймворком, который работает с бд. это не 1С 2) в бд существует таблица OrderEntity с колонкой-ключем id и рядом других колонок. 3) вопрос скорее спецам по sqlite, т.к. как я выше написал, обращение к бд осуществляется не из 1С. т.е. методы из 1С нельзя применять 4) представить массив через "select 'v1' as id union all select 'v2' union all ..." не получится, т.к. заранее размер массива не известен. |
|||
5
Uberschall
08.05.21
✎
19:44
|
(4) 4) + динамически генерировать текст запроса будем думать, что нельзя (хотя надо проверить...)
|
|||
6
Djelf
08.05.21
✎
19:54
|
(4) На форуме sqlite, принято, приводить всю примерную задачу начиная с создания таблиц.
Либо кидать ссылку на таблицу с исходными данными, запросами и т.п. И обязательно пример того что работает, а что работает как-то не так. Тут в все в стиле мисты: догадайтесь сами, что у меня там в данных есть, что у меня там в данных нет, что я хочу получить и зачем. А "найти значения из массива, для которых отсутствуют данные в БД" это можно сделать очень по разному, и скорость будет отличаться в 1000раз и больше! |
|||
7
Uberschall
08.05.21
✎
20:06
|
(6)
ок, давайте попробую уточнить. дано: массив со значениями "А", "Б", "В". таблица (в запросе- OrderEntity) с колонкой id с содержимым строк 1. id="А" 2. id="Б" нужно: составить запрос, который найдет значения из массива, которые отсутствуют в таблице в колонке id. (3) Salimbek подал мысль с генерируемым запросом через объединение- это одно из решений (проверил- можно динамические запросы использовать). |
|||
8
Djelf
08.05.21
✎
20:07
|
+(6) Например можно вот так выкрутится. А потом джойнить OrderEntity.id и отбросить лишнее
|
|||
9
Djelf
08.05.21
✎
20:11
|
(7) Посмотри есть ли в том диалекте языка, на котором ты пишешь, поддержка виртуальных таблиц sqlite.
Либо нормальная обертка временных таблиц. Это все пишется обычно на чистом си - накладные расходы очень малы. |
|||
10
Uberschall
08.05.21
✎
20:11
|
(8) по сути тоже будет динамический запрос в зависимости от размера массива.
спасибо. попробую оба варианта. |
|||
11
Djelf
08.05.21
✎
20:17
|
Ну в (8) я загнул, можно и проще
"select T.* from (values (1),(2),(3),(4),(5)) as T;" |
|||
12
Djelf
08.05.21
✎
20:18
|
Это микросекунды при небольшом объеме...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |