Есть ли способ упорядочить результат запроса sqlite PRAGMA foreign_key_list () по порядку, появятся столбцы в таблице, по которой выполняется запрос? - PullRequest
0 голосов
/ 07 января 2019

Я хочу программно добавить индекс в таблицу sqlite, если в ней больше строк, чем установленный размер ограничения. Я хочу добавить индекс ко всем столбцам, которые имеют внешний ключ, чтобы получить их, я использую

PRAGMA foreign_key_list(myTable)

где я использую столбец from, чтобы получить столбцы из моей таблицы, которые имеют внешний ключ. Поскольку важен порядок индекса с несколькими столбцами, я хочу упорядочить их в порядке их появления в таблице. Есть ли способ найти заказ в этом PRAGMA запросе (и как), или мне нужно сделать другой запрос (PRAGMA table_info(myTable)) и найти заказ программно?

РЕДАКТИРОВАТЬ: работа с файлами .db3.

1 Ответ

0 голосов
/ 07 января 2019

При ограниченном тестировании может показаться, что если внешние ключи определены на уровне столбца, то столбец id является более высоким значением для ранее определенных внешних ключей.

Вы можете использовать прагмы, которые возвращают результаты в инструкциях SELECT, таких как и сортировать в соответствии с одним из столбцов (идентификатор использовался, если использовалось подходящее соглашение об именах столбцов, которое можно отсортировать в соответствии с из колонка (отметив, что ее необходимо заключить))

SELECT * FROM pragma_foreign_key_list('mytable') ORDER BY id ASC;

Например, рассмотрим следующее: -

DROP TABLE IF EXISTS mytable;


CREATE TABLE IF NOT EXISTS mytable (id INTEGER PRIMARY KEY,
  _otherd_building_id_reference INTEGER REFERENCES _building(_id),
    _building_id_reference INTEGER REFERENCES _building(_id),
    _room_id_reference INTEGER REFERENCES _room(_id),
    _campus_id_reference INTEGER REFERENCES _campus(_id),
    _othera_campus_reference INTEGER REFERENCES _campus(_id),
    _otherz_room_id_reference INTEGER REFERENCES _room(_id),
    _otherc_building_id_reference INTEGER REFERENCES _building(_id)
    );


SELECT * FROM pragma_foreign_key_list('mytable') ORDER BY id DESC;
  • Обратите внимание, что изначально столбцы без префикса, такие как * прочее? были добавлены, другие , c и z были добавлены в конце, а затем, наконец, _otherd_building_id_reference был добавлен.

Результат при выполнении вышеуказанного постоянно: -

enter image description here

...