Могу ли я включить имя таблицы в результат запроса SQL? - PullRequest
2 голосов
/ 08 октября 2009

Если у меня есть две таблицы:

Actor:
ID | Name
1  : Patrick
3  : Emma
7  : Vanessa

Singer:
ID | Name
4  : Will
5  : Madonna
13 : Emma

Можно ли сгенерировать следующую таблицу из запроса SQL, в которой содержится имя таблицы, из которой получена каждая запись?

ID | Career | Name
1  : Actor  : Patrick
3  : Actor  : Emma
4  : Singer : Will
5  : Singer : Madonna
7  : Actor  : Emma
13 : Singer : Emma

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

Ответы [ 6 ]

14 голосов
/ 08 октября 2009
select ID, 'Actor' as Career, Name from Actor
union all
select ID, 'Singer' as Career, Name from Singer

Или что-то в этом роде.

4 голосов
/ 08 октября 2009

Хорошо, два человека избили меня на пример запроса, который я публиковал.

Но я думаю, что лучший ответ на ваш корневой вопрос: если «Карьера» является релевантным атрибутом в ваших данных, и идентификаторы, как ожидается, будут уникальными, почему бы не иметь одну таблицу, в которой «Карьера» является фактическим столбцом?

4 голосов
/ 08 октября 2009
SELECT ID, 'Actor' AS Career, Name FROM Actor
UNION
SELECT ID, 'Singer' AS Career, Name FROM Singer
2 голосов
/ 08 октября 2009

Попробуйте:

select id, 'Actor' as Career, Name
from Actor
union
select id, 'Singer' as Career, Name
from Singer
2 голосов
/ 08 октября 2009

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

SELECT ID, 'Actor', Name FROM Actor
  UNION SELECT ID, 'Singer', Name FROM Singer;
0 голосов
/ 21 ноября 2012

Это тоже не идеал, но он отвечает на ваш вопрос, предполагая, что в базе данных только две таблицы.

DECLARE @t1 nvarchar(10) = (SELECT top 1 TABLE_NAME
                            FROM INFORMATION_SCHEMA.TABLES)
DECLARE @t2 nvarchar(10) = (SELECT top 1 TABLE_NAME
                            FROM INFORMATION_SCHEMA.TABLES
                            WHERE NOT TABLE_NAME = @t1)

DECLARE @SQLcommand nvarchar(400)

SET @SQLcommand = 'select ID, '+ @t1 +' as Career, Name from ' + @t1 +
                  ' union all select ID, '+ @t2 +' as Career, Name from ' +@t2

EXEC(@SQLcommand)

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

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