powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / замена in (.....)
29 сообщений из 29, показаны все 2 страниц
замена in (.....)
    #39919614
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть набор данных int,int ....
как можно заменить
selec * from xx where q in (int,int.....)
где этих int может быть много
вариант создать из int временную таблицу и выбрать через джоин
как можно сделать?*
...
Рейтинг: 0 / 0
замена in (.....)
    #39919648
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия MySQL какая? Много - это сколько? порядок хотя бы...
...
Рейтинг: 0 / 0
замена in (.....)
    #39919655
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
самая последняя.
1000++
вопрос более теоретический
...
Рейтинг: 0 / 0
замена in (.....)
    #39919695
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
SELECT t1.*
FROM table t1
NATURAL JOIN (VALUES ROW(1),
                     ROW(2),
                     -- ...,
                     ROW(1000)) t2 (q)
...
Рейтинг: 0 / 0
замена in (.....)
    #39919733
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
вариант создать из int временную таблицу и выбрать через джоин

Вариант. Рядом же обсуждали.
https://www.sql.ru/forum/1321622-1/hibernate-repository-nativequery-peredat-massiv-kak-parametr-zaprosa
...
Рейтинг: 0 / 0
замена in (.....)
    #39919750
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Вариант.
Да дерьмовенький вариант-то. WHERE IN - это считай гарантированные тормоза, исключения крайне редки.
...
Рейтинг: 0 / 0
замена in (.....)
    #39919764
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Да не where in, а join временной таблицы.
...
Рейтинг: 0 / 0
замена in (.....)
    #39919774
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Да не where in, а join временной таблицы.
вот созодание временной таблицы и хочется избежать...
...
Рейтинг: 0 / 0
замена in (.....)
    #39919782
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

А какие варианты? in - тормозной и не резиновый. В ракле через передачу clob'а, его парсинга и опять засовыванием его или в коллекцию.
...
Рейтинг: 0 / 0
замена in (.....)
    #39919789
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
А какие варианты? in - тормозной и не резиновый.
Akina предожил
Akina
Код: sql
1.
2.
3.
4.
5.
6.
SELECT t1.*
FROM table t1
NATURAL JOIN (VALUES ROW(1),
                     ROW(2),
                     -- ...,
                     ROW(1000)) t2 (q)


вот только у меня не получается воспроизвести
...
Рейтинг: 0 / 0
замена in (.....)
    #39919791
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Так это тоже самое, что засунуть всё в in. Список не резиновый. С другой стороны какой-нибудь пакетный вариант вставки в heap таблицу может быть вполне бодрым. Минус только в том, что надо на клиенте придумывать какие-то костыли, весь список не удастся взять и засунуть одним параметром.
...
Рейтинг: 0 / 0
замена in (.....)
    #39919801
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
это тоже самое, что засунуть всё в in
Не совсем. Динамическая таблица такого размера с бОльшей вероятностью будет проиндексирована, чем список из IN.
...
Рейтинг: 0 / 0
замена in (.....)
    #39919802
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
созодание временной таблицы и хочется избежать...
Гм... а почему? самый ведь разумный вариант... да и все остальные фактически делают то же самое.
...
Рейтинг: 0 / 0
замена in (.....)
    #39919805
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Гм... а почему? самый ведь разумный вариант... да и все остальные фактически делают то же самое.
время на создание таблицы и её заполнение

а твой вариант- это реальный?
в 8.0.17 не работает
...
Рейтинг: 0 / 0
замена in (.....)
    #39919815
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
время на создание таблицы и её заполнение

Какая-нибудь heap-таблица вполне быстрая.
Akina
Динамическая таблица такого размера с бОльшей вероятностью

"с вероятностью" - это не серьёзно. Мы разрабатываем предсказуемые информационные системы, а не в казино играем.
...
Рейтинг: 0 / 0
замена in (.....)
    #39919855
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
в 8.0.17 не работает
И в пятой версии не работает. И в четвёртой. А в последней? которая 8.0.19 - работает. А если в вопросе версия не указана - значит, у автора на этот счёт требований нет, а версия у него самая наисвежайшая.
...
Рейтинг: 0 / 0
замена in (.....)
    #39919856
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
"с вероятностью" - это не серьёзно. Мы разрабатываем предсказуемые информационные системы, а не в казино играем.
Вот когда разработаем свой MySQL или хотя бы разберёмся в его исходнике, принимающем решение по этому моменту - тогда и будем знать точно. А пока только опытным путём... иногда индексирует, иногда нет, и вот хоть расшибись. В internals по этому поводу я ничего не видел.
...
Рейтинг: 0 / 0
замена in (.....)
    #39919857
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
А в последней? которая 8.0.19 - работает.
это что такое делается?какие скачки прогресса!
как отслеживать...
...
Рейтинг: 0 / 0
замена in (.....)
    #39919863
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
как отслеживать...
Не знаю... я просто глазами смотрю... поищи, мож у них ньюсы какие есть рассылочные.
...
Рейтинг: 0 / 0
замена in (.....)
    #39919869
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
Akina
А в последней? которая 8.0.19 - работает.
это что такое делается?какие скачки прогресса!
как отслеживать...

у mysql привычка в минорках фичи выкатывать. У них в целом творческий подход к нумерации, впрочем
...
Рейтинг: 0 / 0
замена in (.....)
    #39919880
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

а как это работает?
Akina
Код: sql
1.
2.
3.
4.
5.
6.
SELECT t1.*
FROM table t1
NATURAL JOIN (VALUES ROW(1),
                     ROW(2),
                     -- ...,
                     ROW(1000)) t2 (q)

...
Рейтинг: 0 / 0
замена in (.....)
    #39919888
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
а как это работает?
Да как... формируем таблицу t2 с полем q и нужными значениями, связываем с ней источник, и надеемся, что сервер при построении плана проиндексирует эту динамическую таблицу. Точно так же можно было запихать этот список и в CTE - разница только в форме записи.
Код: sql
1.
2.
3.
4.
5.
6.
7.
WITH t2 (q) AS ( VALUES ROW(1),
                        ROW(2),
                        -- ...,
                        ROW(1000) )
SELECT t1.*
FROM table t1
NATURAL JOIN t2


Можно было в CTE и набор SELECT 1 q UNION SELECT 2 UNION ... SELECT 1000 изобразить, но это лишние 8 килобайт...
...
Рейтинг: 0 / 0
замена in (.....)
    #39920094
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
есть набор данных int,int ....
как можно заменить
selec * from xx where q in (int,int.....)
где этих int может быть много
вариант создать из int временную таблицу и выбрать через джоин
как можно сделать?*
давно уже решили здесь FAQ: обработка строк и парсинг текстов средствами MySQL

Коротко и изящно
Вкратце
Код: sql
1.
2.
3.
4.
CREATE TABLE test.t1000 (
  id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
);

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT
    ttt.`id` AS `num`
    , SUBSTRING_INDEX(SUBSTRING_INDEX(par.a, ',', ttt.`id`), ',', -1) AS `word`
    , par.a AS source
  FROM t1000 AS ttt JOIN
  (SELECT '1,56,45,78,12,59,' AS a) AS par
  HAVING `word` <> ''
//*   t1000 вспомогательная таблица c автоинкрем. полем id 1..1000 - я такую держу в каждой базе
//*   SELECT * FROM t1000 это вместо 
//*   устаревшего "SELECT 1 as ID UNION ALL SELECT 2 ..."


одно только НО того что выше - в строке параметров необходимо добавить еще один разделитель, иначе будут повторения, и дополнительная работа. Ну если разделитель известен, то заКОНКАТить его недолго. Просто у меня в таком виде запомнено и иногда используется
Где то Javadbc выкатывал решение в общем виде, должно быть в FAQ
...
Рейтинг: 0 / 0
замена in (.....)
    #39920119
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати Вадя там был)
19136394
...
Рейтинг: 0 / 0
замена in (.....)
    #39920145
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,
это несколько не то
вот тут
VALUES ROW(1),
ROW(2),
-- ...,
ROW(1000)
хоть и написано что 1,2,.... 1000
это не означает что будет такое
это только частный случай
row(N), row(XX)....
что и подразумевает в данном случаем
...
Рейтинг: 0 / 0
замена in (.....)
    #39920231
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

я показал табл id 1..1000 просто для примера, можно больше, до 10000 это моя вспомогательная таблица
да согласен, новая фича удобная

для замены where in() запись новшества проще (ROW - это 1 столбец)
VALUES ROW(список в in)
...
Рейтинг: 0 / 0
замена in (.....)
    #39920232
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

если есть ограничение в 10000 такая таблица, наверное , хорошее решение, да ещё если её в памяти строить (при старте mysql)
а вот когда максимальное число не известно...
...
Рейтинг: 0 / 0
замена in (.....)
    #39920236
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

никто так не проектирует, чтобы в in() было тясячи параметров, десяток в IN() это уже странно
А таблицы t100 или t1000 или другая только для замены опорных таблиц типа (SELECT 1 as a UNION SELECT 2 UNION SELECT 3 ......),
кто-то делает селект к какой-нить таблице в информейшн_схема
...
Рейтинг: 0 / 0
замена in (.....)
    #39920239
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov
десяток в IN() это уже странно
тут ведь не только количество важно , но и значение int или bigint.
а насчёт количества этих int - да, большое их количество - странно, но чем чёрт не шутит...
надо иметь варианты.
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / замена in (.....)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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