Проблема в реализации

Здравствуйте!
Postgresql изучаю из любопытства и проф. интересов. и на кое каком примере у меня возникла проблема в реализации, вот собственно запрос:
SELECT * FROM (SELECT tablelink FROM tarifs WHERE tarif_id = 4) AS alias_x WHERE alias_x.id = 80
Суть такова, пытаюсь в подзапросе вытащить из таблицы tarifs поле tablelink (character verying) и затем уже сделать select * по этой таблице, но к сожалению что то не выходит.
Прошу помощи! Как это возможно реализовать?
Заранее спасибо!

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Смотрите что должно быть: В

Смотрите что должно быть:
В результате всего запроса должна получиться таблица.
В выражении FROM должны быть указаны таблицы (реальные или виртуальные) из которых потом делается выборка предложением SELECT. В предложении WHERE происходит фильтрация результатов.
Подробно вся структура SELECT очень хорошо описана в мануал:
http://postgresql.ru.net/manual/queries.html

А у вас получается. что в предложении FROM остаётся виртуальная таблица лишь с ОДНОЙ колонкой tablelink, причём если исходной таблице tarif_id это первичный ключ, то в этой таблице ещё и всего одна строка будет. Следовательно дальнейшее указание WHERE бессмыслено, потому что в виртуальной таблице, созданной подзапросом нет поля id.

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

Re::

Вот смотрите,
Есть таблица Tarifs структура такая
create table tarifs (
tarif_id integer ...... (Эт первичный ключ для данной таб.),
tarif_name character .....,
tablelink character verying(255) (Вот это поле самое интересное, в ней буду хранить имя таблицы соответсвенно в стринг значении)
)
К приеру вот так
tarif_id | tarif_name | tablelink |
_______ |____________ |__________ |_
....1.....|...'Тариф 1'..|....'VPN'....|
_______ |____________ |__________ |

ТАк же есть такая таблица VPN (реальная не виртуальная).
Таблица VPN:

.....id....| vpn_settings|
________|______________|
.....3.....|..."Что то"....|
________|_____________ |

Я пытаюсь сделать так
SELECT * FROM (SELECT tablelink FROM tarifs WHERE tarif_id = 1) AS alias_x WHERE alias_x.id = 3
В итоге хочу получить такое select * from VPN as alias_x where alias_x = 3,
Где tablelink это результат запроса (SELECT tablelink FROM tarifs WHERE tarif_id = 1).
То есть я хочу пройтись по таблице tarifs с криетерием отбора где tarif_id = 1 вытащить от туда tablelink (Собственно значение tablelink будет играть роль имени таблице в запросе
SELECT * FROM (SELECT tablelink FROM tarifs WHERE tarif_id = 1) AS alias_x WHERE alias_x.id = 3

Т.е. грубо говоря вы хотите

Т.е. грубо говоря вы хотите одним запросом из некой таблицы достать имя другой таблицы и выполнить оставшуюся часть запроса уже над таблицей, имя которой достали? Так делать нельзя. Даже в ORACLE. Поясню почему: потому что на момент компиляции запроса PostgreSQL не знает какова будет структура в таблице, имя которой вы извлекаете и даже не знает существует ли она вообще.

RE::admin

спасибо! ;)
А вообще как можно сделать то что я задумал? Поделитесь мыслями
Если это вообще реально

То, что вы задумали я уже

То, что вы задумали я уже написал - никак.
А если у вас есть таблицы, которые содержат связанную информацию, то извлечь её можно разными способами, основываясь на общих колонках в таблицах.

Например, если ваша таблица tarifs выглядит так:

tarif_id | tarif_name | 
-----------+-----------------+
    1     |  Тариф1     |
    2     |  Тариф2     |
----------+------------------+

а потом есть таблица settings

tarif_id | setting_name | setting_value
-----------+----------------------+---------------------
  1        | domain_count|   1
  1        | servers   |   1
  2        | domain_count|   3
  2        | servers   |   5
-----------+-----------------------+--------------------

То как видим получается вполне нормальная структуа, в первой таблице описаны тарифы, во второй настройки этих тарифов. К какому тарифу относятся те или иные настройки понятно из tarif_id. В итоге по этим двум таблицам довольно простым запросом можно получить полный перечень настроек с указанием тарифа.

Это я так понял, что вы хотели сделать.

Нет!

нЕТ, к сожалению все не так просто)
Я позже покажу вам структуру БД и вы поймете что я имел ввиду.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023