Ссылаться на текущую таблицу, используя ссылку "это"? - PullRequest
0 голосов
/ 14 февраля 2012

У меня следующий запрос:

SELECT * from foo where timestamp = (select max(timestamp) from foo)

Где "foo" ofcourse относится к имени таблицы.

Моя проблема в том, что у меня нет доступа к этой таблице "name", ноиметь API, который заботится о ссылках на конкретную таблицу на основе ключа, который необходимо передать ей.Затем ApI принимает второй аргумент where и объединяет две части для формирования запроса.

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

Можно ли использовать что-то вроде этого:

SELECT * from foo where timestamp = (select max(timestamp) from "this")

, где "this" будет относиться к текущей таблице?

Я совершенно новичок в SQL, поэтомувопрос может показаться немного глупым, если это очевидное поведение в SQLite

Thnx заранее ...

1 Ответ

1 голос
/ 14 февраля 2012

Нет, SQL не имеет ничего подобного. В конце концов, на какую таблицу он будет ссылаться при выборе из нескольких таблиц? Позволяет присвоить таблице локальное имя (select * from foo as bar), но его нельзя использовать в качестве имени таблицы при вложенном выборе.

Ваш единственный шанс - каким-то образом добраться до сопоставления от ключа к имени таблицы.

Если это какая-то библиотека, к которой у вас нет доступа, но вы можете, по крайней мере, получить доступ к соединению с базой данных (sqlite3 * в C / C ++), вы можете настроить авторизатор, чтобы увидеть, к каким таблицам библиотека читает, чтобы перепроектировать это. Вы могли бы злоупотребить им до такой степени, что вы бы вызвали один запрос со значением 'false', поэтому он ничего не возвращает, но авторизатор вызывается с нужным вам именем таблицы, а затем совершает реальный вызов с правильным where. Но это довольно сложно, поэтому попробуйте сначала упростить сопоставление.

Я должен добавить, что это выглядит как действительно плохой дизайн. Разделение записей одного типа по нескольким таблицам является ненужным осложнением (sqlite не имеет каких-либо ограничений, о которых вы бы заботились), и если типы отличаются, вам все равно нужно знать, что это такое, поэтому API должен быть явно указан для таблицы или хотя бы определенные правила отображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...