db: найти имя таблицы по id - PullRequest
       2

db: найти имя таблицы по id

0 голосов
/ 21 сентября 2011

Можно ли найти имя таблицы по идентификатору? У меня есть несколько таблиц, которые расширяют другую таблицу, когда я нахожу идентификатор в «супер» таблице, я хотел бы знать, в какой подтаблице находится этот идентификатор. Есть ли способ с индексацией сделать это или другой способ? Спасибо

Ответы [ 2 ]

0 голосов
/ 26 сентября 2011

Ваш пример действительно неясен, но ...

статья (материал, идентификатор) новости (id ссылки на статью (id), morestuff) курсы (id ссылки на статью (id), Evenmorestuff)

То есть вы используете идентификатор из статьи для ссылки на новости или курсы и хотите не выбирать объединение новостей и курсов?

1) Ваш текущий запрос не содержит эту информацию

2) Несколько способов сделать это:

a) вы изменяете свою модель данных на нечто более общее (статья, r_article_news, новости, r_article_courses, курсы) и определяете это на этой основе

b) вы добавляете информацию в таблицу статей (добавляете столбец с именем type, в который вы будете вводить либо новости, либо курсы)

в) вы делаете свой первый запрос немного тяжелее, чтобы автоматически определить его

SELECT a.*,b.type 
FROM article a 
INNER JOIN 
    (SELECT id,'news' AS type 
    FROM news 
    UNION 
    SELECT id,'courses' AS type 
    FROM courses) b 
ON a.id=b.id;
0 голосов
/ 21 сентября 2011

Теги говорят mysql и postgresql.Поскольку неясно, какой из них вам нужен, вот решение для mysql.

. Очевидно, вы можете сделать это, только если в ваших таблицах установлен набор FOREIGN KEYS.Например, если у вас есть база данных dogs_and_peaople с двумя таблицами:

dogs
------
id
owner_id -- foreign key on people.id
name

people
------
id
name
surname

Если вы хотите узнать, для какой таблицы и поля встречаются символы dogs.owner_id, вы можете посмотреть в базе данных information_schema, вот так:

SELECT 
    REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM
    information_schema.KEY_COLUMN_USAGE
WHERE
    CONSTRAINT_SCHEMA = 'dogs_and_peaople' -- database name
    AND TABLE_NAME = 'dogs'
    AND COLUMN_NAME = 'owner_id'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...