Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 запрос для связанных таблиц  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 392
Здравствуйте! Как бы правильнее выразить то, что хочешь спросить :) Итак....

Есть таблица первичного ключа (условно таблица 1 вида)
MAIN
----------------
id NameField

и n-е количество таблиц внешнего ключа вида (условно таблицы 2 вида)
SubMAIN_N
----------------------
id MainID NameField

связи один ко мнгоим MAIN.id -> SubMAIN_N.MainID

есть запрос

SELECT id
FROM MAIN
WHERE NameField LIKE '%строка%'

и вот вотпрос: возможноли и каким образом в таблицу вида
Result (условно 3 вида)
-----------------------
RecordID NameTable

наполнить таким образом чтоб поле NameTable содержало название таблицы внешнего ключа, поле RecordID содержало ID записи таблицы внешнего ключа.

Другими словами чтоб поиск значений id из таблицы MAIN (отобранных по условию) осуществлялся в связанных таблицах, а в табл. 3 вида попали имя таблицы и id записи где MAIN.id -> SubMAIN_N.MainID

Надеюсь на помощь, спасибо ....
13 апр 11, 13:58    [10512345]     Ответить | Цитировать Сообщить модератору
 Re: запрос для связанных таблиц  [new]
iljy
Member

Откуда:
Сообщений: 8711
Алексаша,

select t1.* from
(
  select MainID, 'SubMAIN_1' TName from SubMAIN_1 union all
...
  select MainID, 'SubMAIN_N' TName from SubMAIN_N
) t1 join
(
  SELECT id
  FROM MAIN
  WHERE NameField LIKE '%строка%'
) t2 on t1.MainID = t2.id
13 апр 11, 14:11    [10512514]     Ответить | Цитировать Сообщить модератору
 Re: запрос для связанных таблиц  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 392
iljy,

спасибо за оперативность, но то да не то, извините конечно. дело в том что количество таблиц вида 'SubMAIN_N' , так скажем, растет и мне постоянно прийдется дополнять запрос, ведь в базе есть информация о том в каких связях таблица MAIN, так вот хотелось бы чтоб поиск осуществлялся в связянных таблицах т.е. чтоб самому не дополнять раздел
(
select MainID, 'SubMAIN_1' TName from SubMAIN_1 union all
...
select MainID, 'SubMAIN_N' TName from SubMAIN_N
) t1 join

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

Спасибо ...
13 апр 11, 15:21    [10513108]     Ответить | Цитировать Сообщить модератору
 Re: запрос для связанных таблиц  [new]
iljy
Member

Откуда:
Сообщений: 8711
Алексаша,

INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
13 апр 11, 15:30    [10513162]     Ответить | Цитировать Сообщить модератору
 Re: запрос для связанных таблиц  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 392
iljy,

было бы вообще здоровы если бы Вы, как то в пратическом примере показали использование.

Но вообще то, что я хочу, это возможно реализовать?
13 апр 11, 15:37    [10513225]     Ответить | Цитировать Сообщить модератору
 Re: запрос для связанных таблиц  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 392
Как узнать для конкретной таблицы имена таблиц внешних ключей?
13 апр 11, 15:53    [10513369]     Ответить | Цитировать Сообщить модератору
 Re: запрос для связанных таблиц  [new]
iljy
Member

Откуда:
Сообщений: 8711
Алексаша,

а чего собственно показывать? Вы на основе информационных представлений создаете динамический запрос, потом его выполняете.
13 апр 11, 15:56    [10513395]     Ответить | Цитировать Сообщить модератору
 Re: запрос для связанных таблиц  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 392
iljy,
просто не волшебник я :), учусь

то что вы мне дали использовать так?

select *
from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS

в итоге по идее то что мне может косвенно помочь это поле CONSTRAINT_NAME

т.е. так?

select *
from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
where CONSTRAINT_NAME like '%Main%'

но ведь имя может и не содержать имени таблицы первичного ключа.

ясно что истина где то рядом, но я что-то не догоняю это факт :)
13 апр 11, 16:03    [10513457]     Ответить | Цитировать Сообщить модератору
 Re: запрос для связанных таблиц  [new]
iljy
Member

Откуда:
Сообщений: 8711
Алексаша,

select ct1.TABLE_SCHEMA, ct1.TABLE_NAME, ct2.TABLE_SCHEMA, ct2.TABLE_NAME
from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc
	join INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE ct1
		on rc.CONSTRAINT_NAME = ct1.CONSTRAINT_NAME and rc.CONSTRAINT_SCHEMA = ct1.CONSTRAINT_SCHEMA
	join INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE ct2
		on rc.UNIQUE_CONSTRAINT_NAME= ct2.CONSTRAINT_NAME and rc.UNIQUE_CONSTRAINT_SCHEMA = ct2.CONSTRAINT_SCHEMA
where ct2.TABLE_SCHEMA = 'MainTableSchema' and ct2.TABLE_NAME = 'MAIN'
13 апр 11, 16:14    [10513537]     Ответить | Цитировать Сообщить модератору
 Re: запрос для связанных таблиц  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
Алексаша
ясно что истина где то рядом, но я что-то не догоняю это факт :)
select r.CONSTRAINT_NAME, pc.TABLE_NAME as [таблица родитель], pc.COLUMN_NAME as [колонка родитель], fc.TABLE_NAME as [таблица потомок], fc.COLUMN_NAME as [колонка потомок]
from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS r
	join INFORMATION_SCHEMA.KEY_COLUMN_USAGE as pc
		on pc.CONSTRAINT_NAME = r.UNIQUE_CONSTRAINT_NAME
	join INFORMATION_SCHEMA.KEY_COLUMN_USAGE as fc
		on fc.CONSTRAINT_NAME = r.CONSTRAINT_NAME
		and fc.ORDINAL_POSITION = pc.ORDINAL_POSITION
order by r.CONSTRAINT_NAME, fc.ORDINAL_POSITION
13 апр 11, 16:29    [10513648]     Ответить | Цитировать Сообщить модератору
 Re: запрос для связанных таблиц  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 392
iljy,
благодарю :)
13 апр 11, 16:38    [10513722]     Ответить | Цитировать Сообщить модератору
 Re: запрос для связанных таблиц  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 392
alexeyvg,

Ваш ответ вообще в руку, как говорится, большое спасибо. Очень понравилось :)
13 апр 11, 16:47    [10513810]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: запрос для связанных таблиц  [new]
NYX
Member

Откуда: Москва
Сообщений: 4
alexeyvg,

Спасибо, это было именно то, что нужно. Долго искал по форумам ответ на вопрос, как выбрать все ссылающиеся таблицы к таблице с первичным ключом.
24 июл 13, 11:07    [14608934]     Ответить | Цитировать Сообщить модератору
 Re: запрос для связанных таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
NYX
alexeyvg,

Спасибо, это было именно то, что нужно. Долго искал по форумам ответ на вопрос, как выбрать все ссылающиеся таблицы к таблице с первичным ключом.
А если PRIMARY KEY или UNIQUE у таблицы нет?
Тогда как?

Это я к тому, что достаточно искать не по форумам, а на этом форуме
24 июл 13, 11:15    [14608983]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить